SORU
14 Ocak 2009, ÇARŞAMBA


Neden't numaralama'in erişim statik alanları yapıcı olabilir?

Neden numaralama yapıcı statik alanlar ve yöntemler erişebilir mi? Bu bir sınıf ile son derece geçerli, ama bir sıralama ile izin verilmez.

Yapmaya çalıştığım şey statik bir Harita Sırala benim örneklerini saklamak. Abbreivation: arama sağlayan bu kod örneği göz önünde bulundurun

public enum Day {
    Sunday("Sun"), Monday("Mon"), Tuesday("Tue"), Wednesday("Wed"), Thursday("Thu"), Friday("Fri"), Saturday("Sat");

    private final String abbreviation;

    private static final Map<String, Day> ABBREV_MAP = new HashMap<String, Day>();

    private Day(String abbreviation) {
        this.abbreviation = abbreviation;
        ABBREV_MAP.put(abbreviation, this);  // Not valid
    }

    public String getAbbreviation() {
        return abbreviation;
    }

    public static Day getByAbbreviation(String abbreviation) {
        return ABBREV_MAP.get(abbreviation);
    }
}

Bu numaralama kurucusu statik başvurular izin vermez gibi çalışmaz. Ancak sadece bir sınıf olarak uygulanan bulursanız çalışır:

public static final Day SUNDAY = new Day("Sunday", "Sun");
private Day(String name, String abbreviation) {
    this.name = name;
    this.abbreviation = abbreviation;
    ABBREV_MAP.put(abbreviation, this);  // Valid
}

CEVAP
14 Ocak 2009, ÇARŞAMBA


Kurucu denir önce statik alanlar var mı? tüm başlatıldı, çünkü statik alanlar (dahil olanlar temsil eden numaralandırma değerleri) başlatıldı metin düzeni ve numaralama değerleri her zaman gelmeden önce diğer alanlar. Sınıf örnek eğer varsa ABBREV_MAP başlatılmış olduğu gösterilmiş - yok unutmayınsonraPAZAR, sınıf başlatıldığında bir özel durum elde edersiniz.

Evet, biraz karın ağrısı ve muhtemelen daha iyi tasarlanmış olabilir.

Ancak, her zamanki gibi cevap benim deneyim için static {} blok sonunda tüm statik başlatıcı ve tüm statik başlatma, kullanma EnumSet.allOf get tüm değerler.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Angry Paintballer

    Angry Paintb

    8 Ocak 2012
  • DRDAnimation

    DRDAnimation

    28 EYLÜL 2012
  • engineerguy

    engineerguy

    10 Ocak 2010