、匿名クラスを自動的に何らかの理由でそれに沿って合成されることが表示されます。このクラスは、それを再現するのに十分である:プライベート内部クラスが予期しない匿名クラスを合成あなたはプライベート内部クラスとJavaクラスをコンパイルすると
コンパイルpublic class SynthesizeAnonymous {
public static void method() {
new InnerClass();
}
private static class InnerClass {}
}
が、これは予想SynthesizeAnonymous.class
とSynthesizeAnonymous$InnerClass.class
ファイルを生成し、それはまた、合成されたjava.lang.Object
の匿名のサブクラスに対応奇妙SynthesizeAnonymous$1.class
ファイルを生成します。あなたはjavap
と解体を見れば、それはInnerClass
利益この匿名型の隠しパラメータのデフォルトコンストラクタを表示され、new InnerClass()
が呼び出されたときにnull
ことに渡されます。
このクラスはなぜ作成されますか? InnerClass
が静的でない場合でも作成していますが、InnerClass
がプライベートではありませんかInnerClass
のインスタンスがこれまでに作成されていない場合には作成されません。それはアクセス制御の何らかの形ですか?それはどのように機能するのですか?