如何使用Java中的反射访问抽象类中的私有方法?

时间:2014-09-16 12:33:52

标签: java reflection

我有一个示例抽象类代码,如下所示

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)

这不是实际的实现。这是一些示例,我的实际代码抽象类有公共方法,它调用私有方法。

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:3)

您对Method.invoke()的调用缺少一个参数:它的第一个参数应该是要调用该方法的对象;以下所有参数都是调用方法的实际参数。

答案 1 :(得分:0)

使用this library一般性地调用Java或Android中的任何公共,私有或受保护的方法