Java statik iç içe geçmiş bir sınıf, neden?
LinkedList
Java kod bakıyordum ve statik iç içe geçmiş bir sınıf, Entry
kullanımı yapılmış olduğunu fark ettim.
public class LinkedList<E> ... {
...
private static class Entry<E> { ... }
}
Statik iç içe geçmiş bir sınıf, normal bir iç sınıf yerine kullanmanın nedeni nedir?
Tek sebebi aklıma gelen, Giriş örnek değişkenleri erişim yok, bakış OOP açısından daha iyi saklama böylece.
Ama başka nedenler de performans olabileceğini düşündüm. Ne olabilir?
Not. Şartlarımı düzeltmek zorundayım umarım, bu statik bir iç sınıf arardım, ama bu yanlış olduğunu düşünüyorum: http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html
CEVAP
Bağlantı Güneş sayfası, ikisi arasında bazı önemli farklılıklar vardır:
İç içe geçmiş bir sınıfı çevreleyen sınıfın bir üyesi. Statik olmayan iç içe sınıflar (iç sınıflar) özel ilan olsa bile kapsayan bir sınıfın diğer üyeleri erişebilir. Statik iç içe sınıfları kapsayan sınıfın diğer üyeleri için erişim hakkınız yok.
...Not: sadece üst düzey başka bir sınıf gibi dış sınıf örneği üyeleriyle statik iç içe sınıf Bir etkileşim (ve diğer sınıflar).Sonuç olarak, statik iç içe geçmiş bir sınıf davranışsal olarak üst düzey bir sınıf iç içe olmuştur üst düzey bir Sınıf Paketleme kolaylık sağlamak için.
LinkedList.Entry
gibi üst düzey sınıf için gerek yoksadeceLinkedList
(statik de iç içe geçmiş sınıflar Map.Entry
- aynı kavram gibi ** 6, adlı başka şekilleri de vardır) tarafından kullanılır. Ve LinkedList üyeleri için erişim gerekmez beri, statik olmak için mantıklı - daha temiz bir yaklaşım.
Jon Skeet points out, bence daha iyi bir fikir kullanıyorsanız, bir iç içe geçmiş sınıf için başlamak ile olan statik ve sonra karar ver Eğer gerçekten gerekli olmayan statik tabanlı kullanımı.
Neden Java statik olarak bir sınıf bil...
Java iç sınıf ve statik iç içe sınıf...
Neden't statik yöntemler Java'da ...
Neden Java temel yöntem statik mi?...
Neden't ben bir Java arayüzü stat...