2009-08-12 5 views
5

、匿名クラスを自動的に何らかの理由でそれに沿って合成されることが表示されます。このクラスは、それを再現するのに十分である:プライベート内部クラスが予期しない匿名クラスを合成あなたはプライベート内部クラスとJavaクラスをコンパイルすると

コンパイル
public class SynthesizeAnonymous { 
    public static void method() { 
     new InnerClass(); 
    } 

    private static class InnerClass {} 
} 

が、これは予想SynthesizeAnonymous.classSynthesizeAnonymous$InnerClass.classファイルを生成し、それはまた、合成されたjava.lang.Objectの匿名のサブクラスに対応奇妙SynthesizeAnonymous$1.classファイルを生成します。あなたはjavapと解体を見れば、それはInnerClass利益この匿名型の隠しパラメータのデフォルトコンストラクタを表示され、new InnerClass()が呼び出されたときにnullことに渡されます。

このクラスはなぜ作成されますか? InnerClassが静的​​でない場合でも作成していますが、InnerClassがプライベートではありませんかInnerClassのインスタンスがこれまでに作成されていない場合には作成されません。それはアクセス制御の何らかの形ですか?それはどのように機能するのですか?

答えて

5

このクラスは、プライベートコンストラクタへのアクセスを提供するために作成されます。

は詳細についてはthis questionを見てみましょう。

関連する問題