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

时间:2013-08-12 15:59:37

标签: java reflection

这个问题与java反射有关。

  1. 我有一个方法m里面的循环。 m随每次迭代而变化。
  2. m返回一个也改变的某种类型的数组(因为我们在循环的每次迭代中都有一个新方法)。
  3. 我需要遍历每个类型并调用名为getRetVal()的方法。
  4. 代码如下所示:

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

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

1 个答案:

答案 0 :(得分:0)

您可以转发到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来检查哪条路径(或两条路径都没有)。