给定这个方法:
public final void foo (List<MyClass> bar){ .. }
我希望能够反射性地调用这个方法。为了让 getMethod 起作用,我必须将其更改为:
public final void foo (List bar){ .. }
由于显而易见的原因,这似乎不正确,但 getMethod 的输入组合似乎没有其他效果。我在谷歌上到处搜索都无济于事。有什么建议吗?
干杯,谢谢!
最佳答案
import java.util.*;
import java.lang.reflect.*;
public class Test {
public final void foo (List<String> bar){
for(String x : bar)
System.out.println(x);
}
public static void main(String args[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
Test x = new Test();
List<String> y = new ArrayList<String>(); y.add("asd"); y.add("bsd");
x.getClass().getMethod("foo",List.class).invoke(x,y);
}
}
你可以只使用getMethod("foo",List.class)
并使用 List.class
作为一般信息 List<String>
仅在编译时使用。在运行时,方法签名看起来像
public final void foo (List bar)
与编译时类型删除一样,删除了通用信息。
关于带有泛型的 Java 反射方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1753084/