在有效的Java第二版中,作者说,


  尽管很少,但是可以手动建立关联
  使用表达式enclosingInstance.new MemberClass(args)。当你
  可以预期,该关联会占用非静态成员类中的空间
  实例,并增加了其构建时间。


enclosingInstance.new MemberClass(args)是什么意思?我为此搜索了一下,找不到任何东西。有人可以跟我解释一下吗?我必须参加这个主题的研讨会...

最佳答案

这意味着“使用MemberClass作为新实例的参考来创建enclosingInstance的新实例”。

内部类对其隐含类有隐式引用-通常,如果您仅在实例方法中调用new MemberClass(),则隐含类实例是隐式this,但使用enclosingInstance.new MemberClass()可以显式指定其他隐式类。您还可以使用此方法从静态方法或实际上从完全不同的类创建内部类的实例。

演示可以帮助解释:

class Outer {
    private String name;

    Outer(String name) {
        this.name = name;
    }

    class Inner {
        void showEnclosingName() {
            System.out.println("Enclosing instance name: " + name);
        }
    }

    void demo() {
        Outer outer = new Outer("Other Outer");
        Inner inner1 = new Inner(); // Implicitly this.new Inner();
        Inner inner2 = outer.new Inner();
        inner1.showEnclosingName(); // Prints Original Outer
        inner2.showEnclosingName(); // Prints Other Outer
    }

    public static void main(String[] args) {
        Outer outer = new Outer("Original Outer");
        outer.demo();
    }
}

08-06 02:01