java - 如何迭代 invoke() 调用的返回结果?

标签 java reflection

这个问题是关于java反射的。

  1. 我有一个循环,里面有一个方法 m 。 m 随着每次迭代而变化。
  2. m 返回某种类型的数组,该数组也会发生变化(因为每次循环迭代我们都有一个新方法)。
  3. 我需要迭代每种类型并调用名为 getRetVal() 的方法。

代码如下所示:

 for(Object ro: m.invoke(argList[0])
    {
      getRetValMethod = ro.getClasss().getMethod("getRetVal", null);
      Object co = getRetValMethod.invoke(null);
      ....

问题是,invoke 返回一个没有迭代器的对象类型

最佳答案

您可以直接转换到Iterable<?> :

Iterable<?> iterable = (Iterable<?>) m.invoke(argList[0]);
for (Object x : iterable) {
    ...
}

编辑:现在你已经说过它始终是引用类型的数组,你可以转换为 Object[]相反:

Object[] array = (Object[]) m.invoke(argList[0]);
for (Object x : array) {
    ...
}

如果您需要处理这两种情况,可以使用instanceof检查要走哪条路径(或都不走)。

关于java - 如何迭代 invoke() 调用的返回结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18191523/

相关文章:

java - 如何编写jPOS服务

java - 如何更改显示标签排序属性链接

java - 没有找到测试

c# - Windows 7 中的 Assembly.LoadFrom 行为不同

c# - 除了反射之外,还有什么方法可以解决 WPF 对 GC.Collect(2) 的调用?

java - Eclipse:如何提示用户选择一个应用程序来打开文件?

java |如何使用反射和 RTTI 计算所有方法?

c# - 使用 BindAttribute 附加到子类 MVC3 模型中的白名单

c# - EF6动态获取表

java - 写入 catalina.out 的不同消息