如何在Java中以反射方式调用泛型args方法?

时间:2015-08-17 10:53:17

标签: java generics

我想在Java7中构建一个动态方法调用程序。

我可以使用以下代码来实现它。

 Method method = klazz.getMethod(methodName, argsType);
 method.invoke(klazz.getConstructors()[0].newInstance(), args);

但是,argsType只支持Class []类型,这意味着泛型在这里不能很好地工作。有没有其他反映方法可以实现这一目标?

谢谢。

2 个答案:

答案 0 :(得分:0)

对于args,您可以尝试使用新的Object [} {}表示法,我现在无法尝试,但使用对象数组可以传递所有参数。

答案 1 :(得分:0)

编译器会删除通用信息。这意味着在运行时,所有通用类型都被视为Object(例如,所有List<String>变为List<Object>),因此您所要求的是不可能的。

他们在Java std lib中绕过这种方式的方法是提供一个可以在运行时指定类型的类arg。例如,Collections.checkedList()接收一个Class arg,它指定要创建的列表的Generic类型