Java 如何迭代invoke()调用的返回?
这个问题与java反射有关Java 如何迭代invoke()调用的返回?,java,reflection,Java,Reflection,这个问题与java反射有关 我有一个循环,里面有一个方法m。m随着每次迭代而变化 m返回某种类型的数组,该数组也会发生变化(因为我们在循环的每次迭代中都有一个新方法) 我需要遍历每个类型并调用一个名为getRetVal()的方法 代码如下所示: for(Object ro: m.invoke(argList[0]) { getRetValMethod = ro.getClasss().getMethod("getRetVal", null); Object co
for(Object ro: m.invoke(argList[0])
{
getRetValMethod = ro.getClasss().getMethod("getRetVal", null);
Object co = getRetValMethod.invoke(null);
....
问题是,invoke返回一个没有迭代器的对象类型您可以强制转换为
Iterable
:
如果您需要处理这两种情况,您可以使用
instanceof
检查下一个路径(或两者都不下)。然后将对象强制转换为预期路径……您是说m
每次都会通过您发布的for
循环进行更改吗?或者每次通过包含您在正文中发布的代码的其他循环?此for循环位于未显示的另一个for循环中。for循环导致m更改该循环的每个迭代。所以我们每次都有一个新方法,我们调用这个方法,它返回一个某种类型的数组。因为我们调用不同的方法,所以得到了不同类型的数组。我希望这能澄清问题。invoke返回对象类型。在运行时,它始终是某种引用类型的数组。当我尝试你的代码时,我得到了一个“ClassCastException:myReferenceType;无法转换为java.lang.Iterable”。@HukeLau_DABA:啊,你没有说过这是一个数组。在这种情况下,将其转换为对象[]
。将编辑。
Iterable<?> iterable = (Iterable<?>) m.invoke(argList[0]);
for (Object x : iterable) {
...
}
Object[] array = (Object[]) m.invoke(argList[0]);
for (Object x : array) {
...
}