当前位置: 首页 > 知识库问答 >
问题:

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

元俊雅
2023-03-14

我在使用reflections 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;
        }
    }
}

同样,我希望能够实例化一个外部类对象,然后从私有内部类调用某种方法。我一直试图通过反射来做到这一点,但我似乎无法超过1级。此外,内部类可能有也可能没有大多数代码似乎使用的构造函数。上面的代码只是框架

我当前的代码:

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

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

共有1个答案

周苑博
2023-03-14

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

Method someMethod = innerObject.getClass().getDeclaredMethod("someMethod", Integer.TYPE);
someMethod.setAccessible(true);
someMethod.invoke(innerObject, 5);
 类似资料:
  • 问题内容: 如果我有一个包私有的Java类(用“ class”声明,而不是“ public class”),那么将内部方法声明为public或protected或package- private确实没有区别,对吗?那么我应该使用哪个,或者什么时候该使用呢?我有点困惑。 问题答案: 如果我有一个包私有的Java类(用“ class”声明,而不是“ public class”),那么将内部方法声明为p

  • 问题内容: 是否可以使用Java反射从另一个类实例化私有内部类。例如,如果我采用了这段代码 是否可以实例化并从main类中的main方法获得对Test的访问。 问题答案: 使用反射时,您会发现该内部类的构造函数将外部类的实例作为附加参数(总是第一个)。 例:

  • 是否可以从类main中的main方法实例化并获得对Test的访问。

  • 问题内容: 我正在尝试编写一种使用反射将在类中获取私有字段的方法。 这是我的课程(此示例已简化): 所以说我这样做: 我得到一个因为是私人的。有没有一种方法可以使用反射来获取/设置私有变量?(我已经在C#中完成了,但这是我第一次在Java中尝试过它)。如果您想知道为什么需要这样做:),这是因为有时在单元测试期间,将私有变量设置为虚假值以进行故障测试等很方便。 问题答案: 弄清楚了。需要

  • 我知道如何访问私有变量,但我正在尝试测试以下类: ProcessStatusResult: 在我的测试中,我需要在ProcessStatusBody中获取ProcessStatus来验证它,但我不知道如何做到这一点。 有没有一种方法可以使用反射(或其他方法)来访问它,而不必仅仅为了测试而在ProcessStatusResult中添加getter?

  • 我正在装一个应用程序,它工作得很好。但当我使用 在OuterClass中,并通过