public static Optional<Object> invokeMethod(Object target, String methodName, Class<?>[] paramsType,
            Object[] params) {
        if (methodName == null || target == null) {
            return Optional.empty();
        }
        final Optional<Method> method = findMethod(target.getClass(), methodName, paramsType);
        if (method.isPresent()) {
            return invokeMethod(target, method.get(), params);
        }
        return Optional.empty();
    }
@Test
    public void invokeMethod() {
        final TestReflect testReflect = new TestReflect();
        String name = "Mike";
        final Optional<Object> hasParams = ReflectUtils
                .invokeMethod(testReflect, "hasParams", new Class[]{String.class}, new Object[]{name});
        Assert.assertTrue(hasParams.isPresent() && hasParams.get() instanceof String);
        Assert.assertEquals(hasParams.get(), testReflect.hasParams(name));
    }