java Eclipse bug?仅使用默认大小写打开空值
我在试验enum
,发现以下代码在Eclipse上编译并运行良好(构建id:20090920-1017,不确定确切的编译器版本):
public class SwitchingOnAnull {
enum X { ,; }
public static void main(String[] args) {
X x = null;
switch(x) {
default: System.out.println("Hello world!");
}
}
}
在使用Eclipse编译和运行时,它会打印"Hello world!"
并正常退出
对于javac
编译器,这会像预期的那样抛出NullPointerException
那么Eclipse Java编译器中是否存在缺陷
# 1 楼答案
这是一个错误。下面是根据Java语言规范第三版为
switch
语句指定的行为:JLS 14.11 The ^{} Statement
显然,Eclipse中的错误与
default
案例或enum
完全无关以上代码在Eclipse(至少在某些版本)上编译并运行“良好”。当使用
javac
编译时,每个switch
抛出一个NullPointerException
,这正是规范要求的原因
以下是在Eclipse下编译时的
javap -c SwitchingOnAnull
:Eclipse编译器似乎完全摆脱了整个
switch
结构。不幸的是,这种优化破坏了语言规范官方用语
该漏洞已被归档并分配修复
另见
# 2 楼答案
是的。根据JLS,这是一个错误:
# 3 楼答案
当然。如果我们看一下java语言规范的chapter 14.11,它清楚地指出(在“讨论”下):