Bir enum yapıcısı yalnızca sabitleri tarafından çalıştırılabildiğinden, neden paket özel hale getirilir?Neden enum paket özel yapım yapıcısına sahip olabilir?
cevap
Yapıcı aslında paket özel değil ... anahtar kelime eklemezseniz bile, arabirim yöntemleri örtülü olarak public
olduğu gibi dolaylı olarak private
olur.
JLS (§8.8.3) ilgili bölümü devletler:
If no access modifier is specified for the constructor of a normal class, the constructor has default access.
If no access modifier is specified for the constructor of an enum type, the constructor is
private
.It is a compile-time error if the constructor of an enum type (§8.9) is declared
public
orprotected
.
atıf: http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.8.3 –
@Ryan Stewart: Bunu bulduğunuz için teşekkür ederiz. – ColinD
Bu dilin cilvesi var: enum kurucular örtük özeldir.
İlginçtir, böyle bir paket-görünür enum yapıcısı, ilan etmeleri halinde: Pakete başka sınıftan başvurabilmeniz edemez
public enum MyEnum {
A(0),
B(1);
private final int i;
MyEnum(int i) {
this.i = i;
}
public int getI() {
return i;
}
}
.
Cannot instantiate the type MyEnum
Görünüşe göre bunu, enum statik iç içe sınıf sınıfı veya enum yöntemiyle deneyebilirsiniz. Evet, derleme söz konusu hata ile başarısız olur. – Vlasec
"Bir paket görünür enum yapıcısı bildirirseniz ..." ancak aslında bunu yapmanın bir yolu yoktur. – raghavsood33
@ raghavsood33 evet yapabilirsin. Paket görünür bir yapıcıyı gösteren cevabıma eklediğim derlenebilir kodlara bakın. – Bohemian
- 1. Resharper'ın enum için özel ayarları olabilir mi?
- 2. Özel değişken taban sınıf yapıcısına geçiriliyor
- 3. Alt paketler neden paket özel sınıfları göremiyor?
- 4. dönüştürme enum bir enum Uyruk sahip piton
- 5. Bir alıcıya sahip Enum
- 6. İki değerde aynı kafa yapıcısına sahip olduğunu kontrol etme
- 7. Neden bir kullanıcı isteğine sahip olabilirim, dizi boyutu olabilir?
- 8. Paylaşılan Tercihler özel olabilir mi?
- 9. Neden özellikler anlık olabilir?
- 10. Argümanları özel bir log4net Ekleyicinin yapıcısına iletebilir miyim?
- 11. Android'de güvenli enum özel öznitelikleri
- 12. Enum değerinin özel öznitelikleri alın
- 13. Neden System.Drawing.Color bir enum değil
- 14. typedef neden enum türüyle kullanılıyor?
- 15. typedef struct ve enum, neden?
- 16. Ben tanımlanan bir enum türüne sahip
- 17. Birden çok değer türüne sahip Java enum
- 18. NSLog’lar kodun çökmesine neden olabilir?
- 19. Perl'de yazdırma hatası neden olabilir?
- 20. JavaScript'te hafıza bozulması neden olabilir?
- 21. Android'de bu hatayı neden olabilir?
- 22. XMLHttpRequest ProgressEvent.lengthComputable neden yanlış olabilir?
- 23. Neden Neden Nuget'ten daha fazla paket yükler?
- 24. Özel kopya oluşturuculara sahip nesneler atılabilir mi?
- 25. MVVM: ViewModel'in yapıcısına parametre aktarımı
- 26. ArrayPool nesnesini JsonOutputFormatter yapıcısına sağlayın
- 27. Sessiz bayrağa sahip olmayan paket yüklemesini çalıştırma
- 28. sbt android eklentisi ile uzun yapım süreleri
- 29. Neden "kullanıcı" kapsam düzeyine sahip Özel Boyut raporumda görünmüyor?
- 30. alın Enum Özel Özellik (Genel) tarafından
(arayüzler her yönteminden önce 'kamu abstract' gerekmez gibi) kodu alanı üzerinde biraz kaydetmek ve gereksiz ayrıntı önlemek için izin –
@ratchetfreak: Eğer çalışırsanız, derleyici hatası alıyorum O var arayüzler gibi değil. Arayüz yöntemleri * her zaman * 'public abstract'. Değiştiricileri açık hale getirmeye izin verilir, ancak bunları değiştirmenin bir yolu yoktur. –
@RyanStewart, enum kurucusunu kendiniz çağırmanın bir yolu da yoktur, bu nedenle mantıksal olarak özel hale gelir ve paketin özel olarak bu birkaç karakterin kaydedilmesine izin verir. –