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 testInvokeMethod2() throws NoSuchMethodException {
        final Method invokeMethod = TestReflect.class.getDeclaredMethod("invokeMethod");
        final TestReflect testReflect = new TestReflect();
        final Optional<Object> result = ReflectUtils.invokeMethod(testReflect, invokeMethod, null);
        Assert.assertTrue(result.isPresent() && result.get() instanceof Integer);
        Assert.assertEquals(result.get(), Integer.MAX_VALUE);
    }