2009-11-04 19 views
6

Dlaczego ten kod się nie kompiluje?Java: dlaczego to się nie kompiluje?

class A 
{ 
    class B 
    { 
    public enum Enum <-- this line 
    { 
     AD, 
     BC 
    } 
    } 
} 

Compiler donosi:

enum declarations allowed only in static contexts. 

Ale wtedy, kiedy kładę enum class wewnątrz, wszystko jest w porządku.

To dość zaskakujące. Nie sądzę, mam ten problem w C++.

Odpowiedz

10

Można rozwiązać ten problem poprzez B statyczny:

static class B { ... 

Odzwierciedla to bardziej ściśle, co robi C++ z klas zagnieżdżonych. Domyślnie (bez static) wystąpienia B zawierają ukryte odwołanie do instancji A.

Dobre wyjaśnienie różnic można znaleźć pod adresem Java inner class and static nested class.

+7

Wyliczenie jest samoistnie statyczną bestią. W powyższym przykładzie, chcesz tylko, aby był jeden obiekt Enum.AD. Ale jeśli zadeklarowałeś wyliczenie wewnątrz klasy niestatycznej, to (teoretycznie) potrzebujesz innego przykładu Enum.AD dla każdego zakresu synchronicznego. To nie ma sensu ... dlatego jest zabronione. –

Powiązane problemy