我有一个示例抽象类代码,如下所示
public abstract class AbstractClassA {
public abstract void m();
private int aaa(Integer x){
System.out.println(x);
return x;
}
}
然后我尝试以下面的方式访问此私有方法。
Method m = AbstractClassA.class.getDeclaredMethod("aaa", Integer.class);
m.setAccessible(true);
m.invoke(5);
当时我收到了轰鸣声错误。
Exception in thread "main" java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
这不是实际的实现。这是一些示例,我的实际代码抽象类有公共方法,它调用私有方法。
请帮我解决这个问题。
答案 0 :(得分:3)
您对Method.invoke()
的调用缺少一个参数:它的第一个参数应该是要调用该方法的对象;以下所有参数都是调用方法的实际参数。
答案 1 :(得分:0)
使用this library一般性地调用Java或Android中的任何公共,私有或受保护的方法