【问题标题】:Need to access a field present inside a private inner class需要访问私有内部类中存在的字段
【发布时间】:2020-04-08 13:48:29
【问题描述】:
class OuterClass {
    // The below object will be initiated somewhere within
    private OuterClass.InnerClass innerClassObj;
    private class InnerClass {
        {
            int innerClassVariable;
        }
    }
}

class SomeOtherClass {
     public static void main(String args[])
     {
         OuterClass outerClassObj = new OuterClass();
     }
}

我需要使用“SomeOtherClass”中的“OuterClass”中的“innerClassObj”访问“InnerClass”中的“innerClassvariable”字段

【问题讨论】:

  • @Pshemo ,有没有办法?
  • 您将innerClassVariable 设置为块范围,它在InnerClass 之外将不可见。就好像您在方法中创建了一个局部变量...删除括号。此外,该变量具有默认范围,并且可能不公开。阅读范围和封装。
  • @Mr.Polywhirl 我需要删除其中的括号,抱歉。
  • 见下面我的例子,我在外面评论了它们。

标签: java reflection private-members


【解决方案1】:

您使用块范围限定了innerClassVariable,它在InnerClass 之外将不可见。就好像您在方法中创建了一个局部变量...

  1. 删除(范围)括号。
  2. OuterClass 内实例化InnerClass 的新实例
  3. 创建访问内部类变量的方法
class OuterClass {
    private OuterClass.InnerClass innerClassObj;

    private class InnerClass {
        //{
            protected int innerClassVariable = 1; // Set to something...
        //}
    }

    public OuterClass() {
        this.innerClassObj = new InnerClass(); // Instantiate...
    }

    public int getInnerClassVariable() {
        return innerClassObj.innerClassVariable; // Have a way to access the value...
    }
}

class SomeOtherClass {
    public static void main(String args[]) {
        OuterClass outerClassObj = new OuterClass();
        int value = outerClassObj.getInnerClassVariable();

        System.out.println(value); // 1
    }
}

【讨论】:

  • 不,我不允许修改 InnerClass 中的代码,我需要从外部以某种方式访问​​它,谢谢。
猜你喜欢
  • 2016-10-20
  • 2011-02-17
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
相关资源
最近更新 更多