Özel bir iç sınıfla bir Java sınıfı derlediğinizde, anonim bir sınıf otomatik olarak herhangi bir nedenle onunla birlikte sentezlenir. Bu sınıf onu yeniden üretmek için yeterlidir:Özel iç sınıf, beklenmeyen anonim sınıfı sentezler
derlenmişpublic class SynthesizeAnonymous {
public static void method() {
new InnerClass();
}
private static class InnerClass {}
}
, bu beklenen SynthesizeAnonymous.class
ve SynthesizeAnonymous$InnerClass.class
dosyaları oluşturur, ama aynı zamanda sentezlendi java.lang.Object
anonim alt sınıf tekabül garip SynthesizeAnonymous$1.class
dosyası oluşturur. javap
ile sökmeye bakarsanız, InnerClass
varsayılan yapıcısı bu anonim türün gizli bir parametresini kazanır ve null
new InnerClass()
çağrıldığında ona iletilir.
Bu sınıf neden oluşturuldu? InnerClass
statik olmasa bile oluşturulur, ancak InnerClass
özel değil veya InnerClass
örneğinin hiç oluşturulmamışsa oluşturulmaz. Bir çeşit erişim kontrolü mü? Bu nasıl çalışıyor?