2009-11-04 7 views
6

Как этот код не компилируется?Java: почему это не компилируется?

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

Компилятор сообщает:

enum declarations allowed only in static contexts. 

Но тогда, когда я поставил Enum внутри класса А, все в порядке.

Это довольно удивительно. Я не думаю, что у меня есть эта проблема на C++.

ответ

10

Вы можете это исправить, сделав B статичным:

static class B { ... 

Это более близко, что C++ делает с вложенными классами зеркал. По умолчанию (без static) экземпляры B содержат скрытую ссылку на экземпляр A.

Хорошее объяснение различий можно найти по адресу Java inner class and static nested class.

+7

Перечисление - это обычное статическое животное. В приведенном выше примере вы только хотите, чтобы там был один объект Enum.AD. Но если вы объявили enum внутри нестатического класса, вам (теоретически) нужен другой экземпляр Enum.AD для каждой симулятивной области. Это не имеет смысла ... поэтому это запрещено. –

Смежные вопросы