为什么Java中的这种语法有效?

时间:2012-01-11 18:46:42

标签: java syntax

取自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())何时有效?

2 个答案:

答案 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对象。