取自here,为什么这种语法有效:
class X {
class Y {
Y(T a, Z b) {...}
}
public static void main(String... args) {
// why is this valid? the second new looks confusing to me
X<String>.Y<String> x1 = new X<String>().new Y<String>("",""); //ok
}
}
此语法(new Foo().new Bar()
)何时有效?
答案 0 :(得分:4)
Since Java 1.1, apparently(感谢@emory)。
类“Y”是类“X”的非静态nested (inner) class。因此,类“Y”的任何实例都必须由“X”类的“外部”实例构造。
另请参阅本文,其中详细介绍了嵌套类:http://blogs.oracle.com/darcy/entry/nested_inner_member_and_top
答案 1 :(得分:1)
因为java支持&#34;内部类声明&#34;。这意味着我们可以在另一个可能有名称的类中定义一个类(对于你的代码,Y是X类中的内部类)。现在,当你写&#34; new Foo()。newBar()&#34;这意味着首先你创建一个Foo对象,当它被创建时创建Bar对象(定义为内部类),结果是返回一个Bar对象。