有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么空枚举不能有抽象方法?

我意外地发现以下内容没有在Eclipse中编译:

enum Empty {
    ;
    abstract void foo();
}

{a1}似乎验证了此行为:

It is a compile-time error if an enum declaration E has an abstract method m as a member, unless E has at least one enum constant and all of E's enum constants have class bodies that provide concrete implementations of m.

我想知道这背后的原因是什么。为什么不将空枚举视为没有现有实现的抽象类


共 (1) 个答案

  1. # 1 楼答案

    正如您正确指出的,在这种情况下,规范要求您至少有一个枚举常量。这是因为不像通常的抽象类那样没有现有的实现,枚举不能在其他地方实现,因此这种抽象方法变得完全无用

    对于通常的抽象类,实现可以稍后从其他源加载,编译器无法知道这一点。但对于enum,编译器非常确定并没有实现,所以并没有理由声明这样的方法