インナークラスの生成

アウタークラスを指定してインナークラスを生成することが出来たりしますが、あまり知られていません。
以下のようなコードで可能。

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();

これで、outer への参照を持った Inner クラスのインスタンスが生成されるわけだが、この構文を使う場面が私には思いつきません(w
こんな構文を使う必要がある場面って、そもそも設計を失敗しているんじゃ?と思うわけです。
アウタークラスの中でインナークラスをnewするのは割とよく使うけど、アウタークラスの外でインナークラスを生成したことは無いなぁ。

ちなみに詳しくは知らないが Java の言語仕様では、

  • ↓インナークラス
class Outer {
  class Inner {
  }
}
  • ↓ネスティッドクラス
class Outer {
  static class Nested {
  }
}

というように、static の有無によってインナークラス/ネスティッドクラスと呼び分けられているそうな。
static が付いている場合は、単に名前空間がアウタークラスの内側というだけで、アウタークラスへの参照は持ちません。
#でもアウタークラスのプライベートフィールド等へのアクセスは可能
C++のネストクラスと似たものかと。