如何通过Reflection API调用私有方法?
我的代码
public class A {
private String method(List<Integer> params){
return "abc";
}
}
并测试
public class B {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Class<A> clazz = A.class;
Method met = clazz.getMethod("method", List.class);
met.setAccessible(true);
String res = (String) met.invoke("method", new ArrayList<Integer>());
System.out.println(res);
}
}
答案 0 :(得分:7)
您的代码中存在两个问题
getMethod
只能返回public
种方法,以便私人使用getDeclaredMethod
"method"
文字而不是A
类的实例上调用您的方法(String没有此方法,因此您无法在其实例上调用它 - 类似于{{1是不正确的。)您的代码应该是
"method".method(yourList)
答案 1 :(得分:0)
如果您也需要通过反射来创建A
的实例,则可以通过这种方式进行操作
public static void main(String[] args) throws Exception {
Class<?> aClass = A.class;
Constructor<?> constructor = aClass.getConstructors()[0];
Object a = constructor.newInstance(); // create instance of a by reflection
Method method = a.getClass().getDeclaredMethod("method", List.class); // getDeclaredMethod for private
method.setAccessible(true); // to enable accessing private method
String result = (String) method.invoke(a, new ArrayList<Integer>());
System.out.println(result);
}