Java反思:访问内部类内部的私有方法

时间:2018-09-27 04:46:06

标签: java reflection constructor inner-classes

在使用反射API的公共类内的私有类内使用私有方法时,我遇到了问题。这是一个简化的代码示例:

public class Outer {
    private class Inner {
        private Integer value;

        private Inner() {
            this(0);
        }
        private Inner(Integer y) {
            value = y;
        }

        private Integer someMethod(Integer x) {
            return x * x;
        }
    }
}

同样,我希望能够实例化一个Outer类对象,然后从私有someMethod类调用Inner。我一直在尝试使用反射进行此操作,但似乎无法超过1级。而且,内部类可能具有也可能没有大多数代码似乎都在使用的构造函数。上面的代码只是框架。

我当前的代码:

Outer outerObject = new Outer();
Constructor<?> constructor = innerNodeClass.getDeclaredConstructor(Outer.class);
constructor.setAccessible(true);
Object innerObject = constructor.newInstance(outerObject);
innerObject.someMethod(5)

我查找了各种获取内部类或私有方法的方法,但找不到不使用构造函数将外部对象获取到内部对象的方法。我只对在外部对象的元素上的内部类中使用private方法感兴趣。

1 个答案:

答案 0 :(得分:3)

一旦有了内部对象的实例,就可以使用反射来调用方法本身:

Method someMethod = innerObject.getClass().getDeclaredMethod("someMethod", Integer.TYPE);
someMethod.setAccessible(true);
someMethod.invoke(innerObject, 5);