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

标签 java enums abstract-class jls abstract-methods

无意中发现Eclipse中不能编译:

enum Empty {
    ;
    abstract void foo();
}

JLS似乎验证了这种行为:

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.

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

最佳答案

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

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

关于java - 为什么空枚举不能有抽象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33665442/

相关文章:

ios - 在 Swift 中更新/更改枚举的 rawValue

java - 使用枚举作为映射键会在数据库中生成 RAW

c++ - 将 C++ 类转换为 Delphi

java - 转换到一个抽象类......这怎么可能?

java - 如何使用 Java GeoTools 添加文本并将其显示在 JMapFrame 的 map 内容上?

java - 使用 Spring 布局用于 Hand GUI

java - Java 中极慢的 XSLT 转换

sqlite - 如何在 SQLite 中创建 ENUM 类型?

java - 使用 java 将 JSON 对象添加到现有 JSON 数组中

c# - 实现抽象事件会从 ReSharper 发出 "Invocation of polymorphic field-like event"警告