Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何迭代invoke()调用的返回?_Java_Reflection - Fatal编程技术网

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

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

这个问题与java反射有关

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

     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) {
        ...
    }