在 effective java 第二版中,作者说,
It is possible, although rare, to establish the association manually using the expression enclosingInstance.new MemberClass(args). As you would expect, the association takes up space in the nonstatic member class instance and adds time to its construction.
enendingInstance.new MemberClass(args)
是什么意思?我用谷歌搜索这个并找不到任何东西。有人可以向我解释并阐明一些情况吗?我必须参加一个关于这个主题的研讨会......
最佳答案
这意味着“创建 MemberClass
的新实例,使用 enendingInstance
作为新实例的引用”。
内部类对其封闭类具有隐式引用 - 通常,如果您仅在实例方法中调用 new MemberClass()
,则封闭类实例隐式是 this
,但使用 enendingInstance.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();
}
}
关于java - java 中的 enshingInstance.newMermberClass(args) - 有效的 java 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21061473/