访问位于私有内部类中的字段

huangapple 未分类评论46阅读模式
英文:

Need to access a field present inside a private inner class

问题

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();
     }
}

我需要使用在OuterClass中的innerClassObj来访问InnerClass中的字段innerClassVariable,该字段在SomeOtherClass中。

英文:
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();
     }
}

I need to access the field 'innerClassvariable' present in 'InnerClass' Using 'innerClassObj' present in 'OuterClass' from 'SomeOtherClass'

答案1

得分: 0

你使用块作用域对 innerClassVariable 进行了作用域限定,它在 InnerClass 外部不可见。这就好像你在方法内部创建了一个局部变量...

  1. 去除(scope)括号。
  2. OuterClass 内部实例化一个新的 InnerClass 实例。
  3. 创建一种方法来访问内部类的变量。
class OuterClass {
    private OuterClass.InnerClass innerClassObj;

    private class InnerClass {
        //{
            protected int innerClassVariable = 1; // 设置为某个值...
        //}
    }

    public OuterClass() {
        this.innerClassObj = new InnerClass(); // 实例化...
    }

    public int getInnerClassVariable() {
        return innerClassObj.innerClassVariable; // 有一种方法来访问这个值...
    }
}

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

        System.out.println(value); // 1
    }
}
英文:

You scoped innerClassVariable with block scoping, it will not be visible outside of the InnerClass. It it as if you created a local variable inside a method...

  1. Remove the (scope) parentheses.
  2. Instantiate a new instance of the InnerClass inside OuterClass
  3. Create a way to access the variable of the inner-class
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
    }
}

huangapple
  • 本文由 发表于 2020年4月8日 21:48:29
  • 转载请务必保留本文链接:https://java.coder-hub.com/61102274.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定