Почему этот синтаксис в Java действителен? - PullRequest
1 голос
/ 11 января 2012

Взято из здесь , почему этот синтаксис действителен:

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 ]

4 голосов
/ 11 января 2012

Начиная с Java 1.1, очевидно, (спасибо @emory).

Класс "Y" является нестатическим, вложенным (внутренним) классом класса "ИКС".Таким образом, любой экземпляр класса "Y" должен быть построен из "внешнего" экземпляра класса "X".

См. Также эту статью, которая хорошо описывает вложенные классы: http://blogs.oracle.com/darcy/entry/nested_inner_member_and_top

1 голос
/ 11 января 2012

Bacause Java поддерживает "объявление внутреннего класса". Это означает, что мы можем определить класс внутри другого класса, который может иметь имя (для вашего кода Y является внутренним классом внутри класса X). Теперь, когда вы пишете «new Foo (). NewBar ()», это означает, что сначала вы создаете объект Foo, а при его создании создается объект Bar (определенный как внутренний класс), в результате возвращается объект Bar .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...