### Question:
ReflectUtil { public static <T> T invokeStaticMethod(String clsName, String methodName, Class<?>[] argsTypes, Object[] args) { return invokeStaticMethod(getClass(clsName), methodName, argsTypes, args); }  static T invokeStaticMethod(String clsName, String methodName, Class<?>[] argsTypes, Object[] args); @Nullable static T invokeStaticMethod(Class<?> cls, String methodName, Class<?>[] argsTypes, Object[] args); static T invokeStaticMethodUnSafe(String className, String methodName, Class<?>[] argsTypes, Object[] args);  }### Answer:
@Test public void invokeStaticMethod() { Object result = ReflectUtil.invokeStaticMethod(ReflectUtilTest.class, "testMethod", new Class<?>[]{String.class, int.class, boolean.class}, new Object[]{"AndroidGodEye-String", 10, false}); Assert.assertTrue((Boolean) result); Object result2 = ReflectUtil.invokeStaticMethod(ReflectUtilTest.class.getName(), "testMethod2", new Class<?>[]{String.class, int.class, boolean.class}, new Object[]{"AndroidGodEye-String", 10, false}); Assert.assertNull(result2); Object result25 = ReflectUtil.invokeStaticMethod(ReflectUtilTest.class, "testMethod", new Class<?>[]{String.class, int.class, boolean.class}, new Object[]{"AndroidGodEye-String", "10", false}); Assert.assertNull(result25); try { Object result3 = ReflectUtil.invokeStaticMethodUnSafe(ReflectUtilTest.class.getName(), "testMethod", new Class<?>[]{String.class, int.class, boolean.class}, new Object[]{"AndroidGodEye-String", 10, false}); Assert.assertTrue((Boolean) result3); } catch (Exception e) { Assert.fail(); } try { Object result4 = ReflectUtil.invokeStaticMethodUnSafe(ReflectUtilTest.class.getName(), "testMethod", new Class<?>[]{String.class, int.class}, new Object[]{"AndroidGodEye-String", 10}); Assert.fail(); } catch (Exception ignore) { } try { Object result4 = ReflectUtil.invokeStaticMethodUnSafe("FakeClass", "testMethod", new Class<?>[]{String.class, int.class}, new Object[]{"AndroidGodEye-String", 10}); Assert.fail(); } catch (Exception ignore) { } }