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

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

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

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

enum declarations allowed only in static contexts.

но затем, когда я помещаю перечисление внутри класса A, все в порядке.

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

1 ответов


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

static class B { ...

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

хорошее объяснение различий можно найти в внутренний класс Java и статический вложенный класс.