如何通过ClassLoader调用类方法并获取boolean类型返回值
从ClassLoader调用方法获取boolean返回值的实现方案
Method.invoke()方法的返回值就是目标方法的执行结果,类型为Object。如果目标方法返回基本数据类型,Java会自动将其装箱为对应的包装类,你要调用的方法返回boolean,执行结果会被自动装箱为Boolean类对象,直接强转后拆箱即可得到原生boolean值。
另外注意你要调用的isInitialized是static静态方法,不需要实例化类对象,调用invoke时第一个参数传null即可,可以省去构造实例的冗余代码。
修正后的完整代码
ClassLoader cl = new URLClassLoader(urlsArr); Class<?> loadedMyClass = cl.loadClass(className); // 获取目标方法 Method method = loadedMyClass.getMethod(methodName); // 静态方法invoke第一个参数传null,接收返回结果 Object invokeResult = method.invoke(null); // 强转为Boolean类型后拆箱得到原生boolean值 boolean result = (Boolean) invokeResult; Log.d("Invoked", method.getName() + " 返回值:" + result); return result;
补充注意事项
- 如果你确实需要调用非静态方法,保持原有实例化逻辑即可,
invoke第一个参数传入你创建的实例对象myClassObject就能正常拿到返回值 - 需要处理相关检查异常:包括
ClassNotFoundException、NoSuchMethodException、IllegalAccessException、InvocationTargetException,可以根据业务逻辑选择捕获处理或者向上抛出 - 注意方法名字段的拼写正确性,你原有代码中的
methodNAme大小写拼写有误,很容易触发NoSuchMethodException
内容的提问来源于stack exchange,提问作者Akshat Developer
相关产品推荐
相关产品推荐

