如何迭代invoke()调用的返回



这个问题是关于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返回一个没有迭代器的Object类型

您可以直接转换为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来检查要走哪条路径(或者两者都不走)。

最新更新