Bazen, kod yazdığınız ortamın birden fazla sınıf yükleyiciye sahip olduğunu bile bilmeyebilirsiniz. Bu durumda "==" işleminin enum değerleri üzerinde çalışmasını bekleyebilir miyim?enum vs. sınıf yüklemeleri
cevap
"=="
çalışmaz, ama yine de .equals()
kullanmak istiyorum.
Sen apache commons lang sınıfında ilginizi çekebilir: link text
Çoklu classloaders sürece enum bunlardan biri ile kullanılabilir olduğu gibi sorun olmayabilir. Bu durumda değilse, bir enum'un tüm faydalarını kaybedersiniz. ya da yardımcı olmuyor equals()
kullanılarak
Ve bu arada
. senin enum sınıfı sadece bir kez yüklenirsepublic final boolean equals(Object other) {
return this==other;
}
Burada josefx'in yazdığı gibi aynı şey; Bir enum birden fazla sınıf yükleyici tarafından yüklendiğinde çalışmaya devam edebilir, sadece birbirlerinden izole edilmelerine dikkat etmelisiniz. –
Elbette, ama bu bir acı. Biri enumlarla ilgili olan herhangi bir varsayımı kırar. Ve enton tekil desenini kırar. –
Sınıf yükleyiciler tüm tekil kalıplarını kırıyor. – josefx
hala çalışır: Burada Java 1,6 Enum.equals(Object)
uygulanması bulunuyor.
-
sizin enum sadece yüklenen eklenti içinde kullanıldığında
- enum bireysel eklenti classloaders bir ebeveyn classloader tarafından yüklenmiş sizin enum sınıfı farklı classloaders tarafından yüklenirse
o çalışmaz
- Farklı eklentiler arasında enum değerlerini geçersiniz, ancak uygulama ssloader enum'u yüklemedi. (Enum değerleri eklentileri arasında çapraz asla eğer hala çalışabilir)
o
Java farklı enum değerleri temsil etmek nesne örneklerini kullanan, bu örnekler her saklanır bu yolu olmasının sebebi enum sınıfı içinde statik bir alan olarak. Enum iki kere yüklenirse, her enum değeri iki farklı nesne örneği tarafından temsil edilir. == operator
yalnızca referansları karşılaştırır ve bir enum değerini temsil eden çoklu örneklerden habersizdir, bu nedenle farklı sınıf yükleyicileri tarafından yüklenen değerler eşleşmez.
"== operatör sadece referansları karşılaştırır" bir dogma gibi ses çıkarır. Enum zaten çok özel bir şey. Bir uzmanlık alanı, "==" yi "this.ordinal() == this.ordinal()" olarak tanımlayabilir. Bu sorunu çözebilir mi? – Dima
@Dima enum'un her iki yüklü tanımları aynı olduğu sürece çalışacaktır. Sıra değeri sadece kod değiştiğinde (yeni değerler, farklı sıralamalar) kaynak kodda Enum sabitinin dizinini (konumunu) içerir. Hız bir sorun değilse, isimlerini karşılaştırabilirsiniz. – josefx
- 1. Enum vs Sabitler/Statik Üyeli Sınıf?
- 2. Enum vs Çok iyi yazılmış enum
- 3. Sınıf-kapsamlı enum
- 4. C++ bir sınıfta statik enum vs enum bildirme
- 5. Enum vs Boolean kullanıyor musunuz?
- 6. Enum, sınıf kapsamı dışında bildirildi
- 7. ClickOnce yüklemeleri
- 8. Sınıf() vs self .__ class __()?
- 9. Sınıf VS ref Yapı
- 10. JavaScript kimliği + sınıf vs. sınıf seçici performansı
- 11. Nesnemde bir typedef enum kullanma Sınıf
- 12. Enum kullanarak sınıf türünü nasıl çözülür
- 13. Büyük dosya yüklemeleri
- 14. HTM olarak CSV yüklemeleri
- 15. Wget yüklemeleri arasında bekleyin
- 16. Java: Çoklu yüklemeleri birleştirme
- 17. Enum of Enum NULL
- 18. Tarayıcı yüklemeleri üzerinden APK yüklenemiyor
- 19. Homebrew ile Çakışan MySQL yüklemeleri
- 20. Çözüm Gezgini vs Solution Navigator vs Sınıf Görünümü
- 21. maruz enum yazılan özellikler
- 22. bir Enum
- 23. Enum
- 24. Veritabanındaki Sabitleri (Enum) en iyi nasıl gösterir (INT vs VARCHAR)?
- 25. C++ enum
- 26. Sınıf hiyerarşi terimleri, ancestor- vs. parent-class
- 27. Java Groovy iç/dış sınıf tutarsızlık vs
- 28. enum sınıfı
- 29. C++ Ad alanı 'bir sınıf için' bildiren 'kullan' enum
- 30. Enum türü bir Sınıf olduğunda Java yansıması nasıl kullanılır?
Asıl soru - eşittir() 'çalışır mı? –
BTW, Enum 'equals() işlevinin uygulanması sadece' this == other' (Sun/Oracle JDK 6) 'ı çağırır. –
yup, kendi cevabımda yazdığım gibi –