Java外部实例生命周期

Geo*_*lds 1 java nested class parent instance

我对以下内容缺乏了解:如果我使用"速记"创建内部类的实例,那么访问外部类是一个坏主意,即使我没有创建它的显式实例?

例如,请考虑以下代码:

class OuterClass
{
    int i;

    OuterClass() { i = 2; }

    class InnerClass
    {
        int get_parent_i() { return (OuterClass.this.i); }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下编译并返回预期结果(2):

OuterClass.InnerClass ic = new OuterClass().new InnerClass();

System.out.println(ic.get_parent_i());
Run Code Online (Sandbox Code Playgroud)

我的困惑源于这样一个事实:我没有显式创建一个OuterClass对象来实例化一个InnerClass对象,尽管似乎无论如何都存在.有人可以告诉我发生了什么,如果我出于任何原因要么访问或忘记幻影实例?

非常感谢!

Aff*_*ffe 7

new OuterClass()如果没有明确地创建它的实例,你认为怎么办?:)

您没有明确地存储对它的引用,但这是另一回事.无论您对结果执行什么操作,调用构造函数都会生成一个实例.内部类有一个内置$this引用,返回外部类,因此只要保留内部类,就会始终存在对它的引用.

无论是使用一个内部类是曾经一个好主意,是历史上有争议的话题,但没有什么特别不妥的特定使用.