SORU
17 NİSAN 2009, Cuma


Java anonim iç sınıflar statik yapmak mümkün mü?

Java, iç sınıflar static ya da değil. static, onlar içeren örnek (aynı zamanda iç sınıflar artık yok denilen, iç içe geçmiş sınıflar denir) işaretçi başvuru içermiyor. Başvuru gerekmez zaman bir iç Sınıf static yapmak için unutmadan, çöp toplama veya kaçış analizi ile sorunlara yol açabilir.

Anonim iç sınıf yapmak mümkündür static da? Yoksa derleyici bunu otomatik olarak tüm alt sınıflar olamaz, çünkü, olan rakam nedir?

Eğer isimsiz bir karşılaştırma yaparsam, örneğin, neredeyse hiç dışarıya başvuru gerekir:

  Collections.sort(list, new Comparator<String>(){
       int compare(String a, String b){
          return a.toUpperCase().compareTo(b.toUpperCase());
       }
  }

CEVAP
17 NİSAN 2009, Cuma


Hayır, hayır, derleyici bunu anlayamıyorum. Bu FindBugs sürekli değişiyor anonim iç sınıflar varsa onların örtülü kullanmıyorlar bile static iç içe geçmiş sınıflar adlı öneriyor. this başvuru.

Düzenleme:Tom Teşrifat - tackline anonim sınıfı statik içerik () main yöntemi gibi oluşturulursa, anonim sınıfı aslında diyor ki static. Ama İDEA 20**:

İsimsiz bir sınıf asla abstract (§8.1.1.1). İsimsiz bir sınıf hep bir iç sınıf (§8.1.3); hiçbir zaman,static (§8.1.1, §8.5.1) bu. İsimsiz bir sınıf her zaman örtülü olarak.final (§8.1.1.2).

Roedy Green Java Sözlüğü says that anonim sınıfları statik bir çerçevede izin verilir gerçeğini uygulaması bağımlıdır:

İstiyorsanız bu bölme bakımı kodunuzu, kuyruk sallayan var keşfetti javac.exe izin alacak anonim sınıflar içinde static başlatma Kodu ve static yöntem olsa bile, dil spec diyor daha anonim sınıflar asla static. Bu isimsiz sınıfları, tabii ki, nesnenin örnek alanlar için erişim yok. Bunu tavsiye etmiyorum.özelliğiherhangi bir zamanda çekilmiş olabilir.

Edit 2:Bu İDEA aslında daha açık bir şekilde statik içerikleri §15.9.2 kapakları:

İzin verinCsınıf örneği olmak, ve izin verinbenörnek yaratılıyor. EğerCbir iç sınıfbenhemen örneğini kapsayan bir. Hemen çevreleyen örneğiben(§8.1.3) aşağıdaki gibi belirlenir.

  • EğerCanonim bir sınıf, sonra:
    • Eğer sınıf örneği oluşturma ifade statik içerik (madde 8.1.3) oluşursa, o zamanbenhayır hemen örnek vardır çevreleyen.
    • Aksi takdirde, hemen kapsayan bir örnekbenthis.

Bir anonim sınıfta bir statik içerik kabaca eşdeğer bir static iç içe geçmiş bir sınıf değil tutmak için bir referans kapsayan sınıf, olsa da teknik olarak değil static sınıf.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Blue Lightning TV

    Blue Lightni

    9 EKİM 2011
  • Jon Reed

    Jon Reed

    14 AĞUSTOS 2006
  • ThreadBanger

    ThreadBanger

    2 Mart 2007