如何使用反射 (Java) 调用私有静态方法?
2022-08-31 14:56:06
我想调用一个私有静态方法。我有它的名字。我听说可以使用Java反射机制来完成。我该怎么做?
编辑:我在尝试调用该方法时遇到的一个问题是如何指定其参数的类型。我的方法接收一个参数,其类型为 Map。因此我不能这样做(在运行时,由于Java类型擦除,没有Map这样的东西)。有没有另一种方法可以获得该方法?Map<User, String>.TYPE
我想调用一个私有静态方法。我有它的名字。我听说可以使用Java反射机制来完成。我该怎么做?
编辑:我在尝试调用该方法时遇到的一个问题是如何指定其参数的类型。我的方法接收一个参数,其类型为 Map。因此我不能这样做(在运行时,由于Java类型擦除,没有Map这样的东西)。有没有另一种方法可以获得该方法?Map<User, String>.TYPE
假设你想调用MyClass.myMethod(int x);
Method m = MyClass.class.getDeclaredMethod("myMethod", Integer.TYPE);
m.setAccessible(true); //if security settings allow this
Object o = m.invoke(null, 23); //use null if the method is static
从反射教程调用 main
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
public class InvokeMain {
public static void main(String... args) {
try {
Class<?> c = Class.forName(args[0]);
Class[] argTypes = new Class[] { String[].class };
Method main = c.getDeclaredMethod("main", argTypes);
String[] mainArgs = Arrays.copyOfRange(args, 1, args.length);
System.out.format("invoking %s.main()%n", c.getName());
main.invoke(null, (Object)mainArgs);
// production code should handle these exceptions more gracefully
} catch (ClassNotFoundException x) {
x.printStackTrace();
} catch (NoSuchMethodException x) {
x.printStackTrace();
} catch (IllegalAccessException x) {
x.printStackTrace();
} catch (InvocationTargetException x) {
x.printStackTrace();
}
}
}