Java:为什么这个代码无法编译?

8
这段代码为什么无法编译?
class A
{
  class B
  {
    public enum Enum   <-- this line
    {
      AD,
      BC
    }
  }
}

编译器报告:

enum declarations allowed only in static contexts.

但是当我把枚举放在A类中时,一切都没问题了。

这相当令人惊讶。我认为在C++中我没有遇到过这个问题。

1个回答

12

您可以通过将B声明为静态来解决此问题:

static class B { ...

这更接近于C++中嵌套类的操作方式。默认情况下(没有使用static),B的实例包含对A实例的隐藏引用。

有关区别的详细解释可以在Java内部类和静态嵌套类中找到。


8
枚举类型是一种本质上静态的存在。在上面的例子中,您只需要有一个Enum.AD对象。但是,如果您在一个非静态类中声明枚举类型,则(理论上)每个动态作用域都需要一个不同的Enum.AD实例。这没有意义...因此被禁止。 - Stephen C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接