以下来自Effective Java:
非静态成员类实例与其封闭之间的关联 实例是在创建前者时建立的;它无法修改 其后。通常,通过调用a自动建立关联 非实现成员类构造函数,来自一个实例方法 附上课。尽管很少见,但可以手动建立关联 使用表达式enclosingInstance.new MemberClass(args)。就像你一样 可以预料,该协会会占用非静态成员班级的空间 实例并增加了它的构造时间。
Bloch在这里说的是“尽管很少见,但是可以使用表达式usingInstance.new MemberClass(args)手动建立关联。正如您所期望的那样,关联占用了非静态成员类实例中的空间,增加了施工时间。“ ?
答案 0 :(得分:4)
他的意思是你可以通过至少两种方式建立连接。给定
public class Outer {
public class Inner {
}
void f() {System.out.println(new Inner());}
}
Outer x = new Outer();
如果你打电话
x.f()
然后您打印的值是链接到x
的内部对象。
但也可以调用:
x.new Inner();
创建一个链接到x
的新内部对象。
class Outer {
String name;
public Outer(String name) {
this.name = name;
}
public class Inner {
public String toString() {
return "I belong to " + Outer.this.name;
}
}
void f() {
System.out.println(new Inner());
}
void g(Outer a) {
System.out.println(a.new Inner());
}
}
class Main {
public static void main(String[] args) {
Outer x = new Outer("x");
Outer y = new Outer("y");
x.f();
x.g(y);
}
}
输出:
I belong to x
I belong to y