2009-03-19 14 views
106

Nie mogę uzyskać dostępu do członków instancji otaczającej klasy z wnętrza enumu, tak jak mogłem z wewnętrznej klasy. Czy to znaczy, że wyliczenia są statyczne? Czy jest jakikolwiek dostęp do zakresu instancji otaczającej klasy, czy też muszę przekazać instancję do metody enum, kiedy jej potrzebuję?W języku Java są typami wyliczeń wewnątrz klasy statycznej?

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; 
    } 
} 
+0

Nie jestem pewien, czy całkowicie rozumiem, co próbujesz opisać. czy możesz podać małą próbkę kodu? – Pete

Odpowiedz

160

Tak, zagnieżdżone wyliczenia są pośrednio statyczne.

Z language specification section 8.9:

zagnieżdżone typy wyliczeniowe są niejawnie statyczne. Dopuszczalne jest, aby jawnie zadeklarować wygranie zagnieżdżone typu , aby było statyczne.

44

To nie ma sensu, aby wystąpienie poziomu (non-statycznego) wewnętrzna klasy enum - Jeśli przypadki enum zostali sami przywiązany do zewnętrznej klasy oni złamać gwarancji enum -

na przykład jeśli miał

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

dla wartości enum prawidłowo działać jako stałe, (psuedocode, ignorując ograniczenia dostępu)

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

B1 i B2 musiałyby być te same obiekty.

Powiązane problemy