带有泛型的Java反射方法调用
鉴于此方法:带有泛型的Java反射方法调用,java,generics,reflection,Java,Generics,Reflection,鉴于此方法: public final void foo (List<MyClass> bar){ .. } 由于明显的原因,这似乎是不正确的,但getMethod的输入组合在其他情况下似乎不起作用。我在谷歌上到处搜索都没有结果。有什么建议吗 干杯,谢谢 对我有用 import java.util.ArrayList; import java.util.List; public class Argh { public void foo(final List<Argh
public final void foo (List<MyClass> bar){ .. }
由于明显的原因,这似乎是不正确的,但getMethod的输入组合在其他情况下似乎不起作用。我在谷歌上到处搜索都没有结果。有什么建议吗
干杯,谢谢 对我有用
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>());
}
}
import java.util.ArrayList;
导入java.util.List;
公共类Argh
{
公共作废foo(最终列表参数)
{
系统输出打印项次(“接收”+arghs);
}
公共静态void main(最终字符串[]args)引发异常
{
Argh.class.getMethod(“foo”,List.class).invoke(new Argh(),new ArrayList());
}
}
对我有用
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>());
}
}
import java.util.ArrayList;
导入java.util.List;
公共类Argh
{
公共作废foo(最终列表参数)
{
系统输出打印项次(“接收”+arghs);
}
公共静态void main(最终字符串[]args)引发异常
{
Argh.class.getMethod(“foo”,List.class).invoke(new Argh(),new ArrayList());
}
}
和编译时一样,类型擦除去掉了泛型信息
与编译时类型擦除一样,它去掉了泛型信息。显示实际的反射代码。另一方面,如果你有一个T foo(R输入),那么擦除后的签名将是foo(Object),用于反射;请注意,返回类型不是签名的一部分。请向我们显示实际的反射代码。另一方面,如果你有一个T foo(R输入),那么擦除后的签名将是foo(Object),用于反射;注意返回类型不是签名的一部分。
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);
}
}
public final void foo (List bar)