如何在调用另一方法后执行通过反射获取的Method?
解决反射替换方法调用的问题
没问题,这其实就是Java反射中方法调用的基础操作,我给你直接上代码并解释清楚:
首先,你已经通过Method myMethod = Entry.class.getDeclaredMethod("get" + criteria);拿到了对应的方法对象,接下来只需要用这个方法对象在目标实例上调用即可——目标实例就是entries.get(index)返回的那个Entry对象。
完整代码示例
// 先拿到要调用方法的实例 Entry targetEntry = entries.get(index); // 如果你的getXXX方法是私有访问权限,需要先开启可访问性(public方法可以跳过这一步) myMethod.setAccessible(true); try { // 调用反射方法:第一个参数是要执行方法的实例,后面是方法需要的参数(无参就传null或者空数组) Object methodResult = myMethod.invoke(targetEntry); // 如果你知道方法返回的具体类型,可以强转成对应的类型,比如假设返回的是Port类型: // Port port = (Port) methodResult; } catch (IllegalAccessException | InvocationTargetException e) { // 处理反射调用可能出现的异常,比如打印日志或者抛出运行时异常 e.printStackTrace(); // 或者更友好的处理:throw new RuntimeException("调用反射方法失败", e); }
关键要点解释
Method.invoke(Object obj, Object... args)是反射调用方法的核心API:- 第一个参数
obj必须是该方法所属类的实例(也就是原来你调用getPort()的那个对象); - 第二个可变参数是方法执行需要的参数,你的
getXXX是无参方法,所以传null或者空数组都可以(示例里没传,因为可变参数可以省略)。
- 第一个参数
- 如果你的
getXXX方法是private修饰的,一定要记得调用myMethod.setAccessible(true),否则会抛出IllegalAccessException,因为默认情况下反射不能访问私有成员。 invoke返回的是Object类型,所以如果需要使用具体类型的返回值,记得做安全的类型转换(最好先判断类型再强转,避免ClassCastException)。
内容的提问来源于stack exchange,提问作者myst02
相关产品推荐
相关产品推荐

