1

静的コンテキストはどのタイプのインスタンスも参照できないことはわかっていますが、mainメソッドで何が起こるか、次のコードサンプルが問題なくコンパイルされる方法は次のとおりです。

public class MyOuter
{
    public static void main(String[] args) 
    {
        MyOuter mo = new MyOuter(); // gotta get an instance!
        MyOuter.MyInner inner = mo.new MyInner();
        inner.seeOuter();

        //Or

        MyOuter.MyInner inner = new MyOuter().new MyInner();
    } 

    class MyInner
    {
        public void seeOuter(){}
    }
 }

それを囲むクラスの静的コンテキスト内から内部クラスをインスタンス化することは禁止されていませんか?

4

1 に答える 1

5

それを囲むクラスの静的コンテキスト内から内部クラスをインスタンス化することは禁止されていませんか?

いいえ-囲んでいるクラスのインスタンスなしで内部クラスをインスタンス化することは禁止されています。あなたの場合、あなたはそれを囲むクラスのインスタンスを持っています:

new MyOuter().new MyInner();

それはまったく問題ありません。

インスタンスメソッドから囲んでいるクラスを指定せずに通常逃げることができる唯一の理由は、それがと同等であるということです

// Within an instance method
this.new MyInner();

詳細については、JLSのセクション15.9.2を参照してください。コンストラクター呼び出しは、「修飾されたクラスインスタンス作成式」です。

于 2012-09-18T09:05:32.790 に答える