如何使用反射(Java)调用私有静态方法?
我想调用一个私有静态方法。我有它的名字。我听说它可以使用Java反射机制来完成。我怎么做
EDIT:我在尝试调用该方法时遇到的一个问题是如何指定其参数的类型。我的方法接收一个参数,其类型为Map。因此,我不能执行Map<User, String>.TYPE
(在运行时,由于Java类型擦除,所以没有Map这样的事情)。有没有其他方法可以获得该方法
你可以在下面搜索框中键入要查询的问题!
我想调用一个私有静态方法。我有它的名字。我听说它可以使用Java反射机制来完成。我怎么做
EDIT:我在尝试调用该方法时遇到的一个问题是如何指定其参数的类型。我的方法接收一个参数,其类型为Map。因此,我不能执行Map<User, String>.TYPE
(在运行时,由于Java类型擦除,所以没有Map这样的事情)。有没有其他方法可以获得该方法
# 1 楼答案
不,你不能说
Map<K,V>.class
。这是因为类型擦除。在运行时,没有这样的事情幸运的是,你可以简单地说
Map.class
。在运行时都是一样的如果这些警告让您感到不安,请搜索与泛型和类型擦除相关的其他问题,这里有大量关于该主题的信息
# 2 楼答案
假设你想给MyClass打电话。myMethod(INTX)
# 3 楼答案
从reflection tutorial调用main
# 4 楼答案
可能会引发许多已检查的异常。ParameterType和parameters都是椭圆参数(可变长度),请根据需要填写它们。JVMBY规范有一个强类型调用约定,因此您需要知道参数类型
话虽如此,除非您正在编写某种应用程序容器、服务器组件容器、类似RMI的系统或基于JVM的语言,否则您应该避免这样做
# 5 楼答案
我使用一个方法来封装获取目标方法,然后调用它。当然,可能有一些限制。下面是放入类及其JUnit测试的方法:
}