java为什么空枚举不能有抽象方法?
我意外地发现以下内容没有在Eclipse中编译:
enum Empty {
;
abstract void foo();
}
{a1}似乎验证了此行为:
It is a compile-time error if an enum declaration E has an
abstract
methodm
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 ofm
.
我想知道这背后的原因是什么。为什么不将空枚举视为没有现有实现的抽象类
# 1 楼答案
正如您正确指出的,在这种情况下,规范要求您至少有一个枚举常量。这是因为不像通常的抽象类那样没有现有的实现,枚举不能在其他地方实现,因此这种抽象方法变得完全无用
对于通常的抽象类,实现可以稍后从其他源加载,编译器无法知道这一点。但对于enum,编译器非常确定并没有实现,所以并没有理由声明这样的方法