You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在调用另一方法后执行通过反射获取的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:08:39