有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

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

多谢各位


共 (2) 个答案

  1. # 1 楼答案

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

    在JavaSTD库中,它们绕过这个问题的方法是提供一个类arg,该类arg可以在运行时指定类型。例如,Collections.checkedList()接收一个类arg,该类指定要创建的列表的泛型类型

  2. # 2 楼答案

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