如何在Java中以反射方式使用泛型参数调用方法?
我想在Java7中构建一个动态方法调用程序
我可以使用下面的代码来实现它
Method method = klazz.getMethod(methodName, argsType);
method.invoke(klazz.getConstructors()[0].newInstance(), args);
但是,argsType只支持类[]类型,这意味着泛型在这里不能很好地工作。有没有其他方法可以实现这一点
多谢各位
你可以在下面搜索框中键入要查询的问题!
我想在Java7中构建一个动态方法调用程序
我可以使用下面的代码来实现它
Method method = klazz.getMethod(methodName, argsType);
method.invoke(klazz.getConstructors()[0].newInstance(), args);
但是,argsType只支持类[]类型,这意味着泛型在这里不能很好地工作。有没有其他方法可以实现这一点
多谢各位
# 1 楼答案
通用信息由编译器擦除。这意味着在运行时,所有泛型类型都被认为是
Object
(例如,所有List<String>
都变成List<Object>
),因此您所要求的是不可能的在JavaSTD库中,它们绕过这个问题的方法是提供一个类arg,该类arg可以在运行时指定类型。例如,Collections.checkedList()接收一个类arg,该类指定要创建的列表的泛型类型
# 2 楼答案
对于args,您可以尝试使用新的Object[}{}表示法,我现在无法尝试,但使用Object数组可以传递所有参数