2009-08-12 35 views
5

Ö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 nullnew 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?

cevap

5

Bu sınıf, özel kurucuya erişim sağlamak için oluşturulur. Ayrıntılar için this question'a bir göz atın.

İlgili konular