Java'da, bir sınıf içindeki enum türleri statik midir?


123

Bir iç sınıfın içinden yapabildiğim gibi, çevreleyen sınıfın örnek üyelerine bir numaralandırma içinden erişemiyorum. Bu, numaralandırmaların statik olduğu anlamına mı geliyor? Çevreleyen sınıfın örneğinin kapsamına herhangi bir erişim var mı, yoksa örneği ihtiyacım olduğu yerde numaralamanın yöntemine geçirmem gerekiyor mu?

public class Universe {
    public final int theAnswer;

    public enum Planet {
        // ...
        EARTH(...);
        // ...

        // ... constructor etc.

        public int deepThought() {
            // -> "No enclosing instance of type 'Universe' is accessible in this scope"
            return Universe.this.theAnswer;
        }
    }

    public Universe(int locallyUniversalAnswer) {
        this.theAnswer = locallyUniversalAnswer;
    }
}

Neyi tarif etmeye çalıştığını tam olarak anladığımdan emin değilim. belki küçük bir kod örneği verebilir misiniz?
Pete

Yanıtlar:


176

Evet, iç içe yerleştirilmiş numaralandırmalar örtük olarak statiktir.

Gönderen dil spesifikasyonu bölüm 8.9 :

İç içe yerleştirilmiş enum türleri örtük olarak statiktir. İç içe yerleştirilmiş bir enum türünün statik olarak açıkça bildirilmesine izin verilir.


45

Örnek düzeyinde (statik olmayan) bir iç enum sınıfı yapmak mantıklı olmaz - enum örneklerinin kendileri dış sınıfa bağlı olsaydı, enum garantisini bozarlardı -

Örneğin, sahip olsaydın

public class Foo {
   private enum Bar {
        A, B, C;
   } 
}

Enum değerlerinin düzgün bir şekilde sabitler olarak davranması için (psuedocode, erişim kısıtlamalarını göz ardı ederek)

Bar b1 = new Foo().A
Bar b2 = new Foo().A

b1 ve b2'nin aynı nesneler olması gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.