【发布时间】:2020-10-14 14:32:56
【问题描述】:
以下代码编译:
public enum Foo {
A,
B{};
public static void main(String[] args) {
Foo f = Foo.A;
List s = (List)f;
}
}
这个没有:
public enum Foo {
A,
B;
public static void main(String[] args) {
Foo f = Foo.A;
List s = (List)f;
}
}
我也可以用Foo.B 替换Foo.A 并得到相同的结果。
这里发生了什么?在第一个示例中,Foo.A 怎么可能是 List?
【问题讨论】:
-
我猜编译器的原因是因为你的枚举确实有子类型,所以它可能有一个实现接口的子类型;即使它实际上没有。
-
我尝试编译您的第一个示例,但它不起作用(将枚举设为非公开并将
main移动到单独的公共类)。编辑。它编译但在执行期间抛出ClassCastException。 -
@Amongalen 是的,这就是重点。总会有一个
ClassCastException,我不明白为什么编译器不知道:) -
@khelwood 据我所知,Java 中的
enum不能从其他类型继承。 -
@HansWurst 实际上,我认为枚举可以实现接口,只是不能扩展类,因为它们已经扩展了
Enum
标签: java enums compiler-errors compilation