鉴于此方法:
public final void foo (List<MyClass> bar){ .. }
我希望能够反思地调用这个方法。为了使getMethod工作,我必须将其更改为:
public final void foo (List bar){ .. }
由于显而易见的原因,这似乎不正确,但getMethod的输入组合似乎不起作用。我在谷歌搜索高低都无济于事。有什么建议吗?
干杯谢谢!
答案 0 :(得分:6)
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)
在编译时类型擦除中删除了通用信息。
答案 1 :(得分:2)
适合我。
import java.util.ArrayList;
import java.util.List;
public class Argh
{
public void foo(final List<Argh> arghs)
{
System.out.println("Received " + arghs);
}
public static void main(final String[] args) throws Exception
{
Argh.class.getMethod("foo", List.class).invoke(new Argh(), new ArrayList<Argh>());
}
}