请考虑以下代码:
enum MyEnum {
A, B, C;
}
int foo(MyEnum e) {
switch (e) {
case A:
return 1;
case B:
return 2;
case C:
return 3;
}
}
^ error: missing return statement
编译器不喜欢这个。将此示例与以下内容进行对比:
int bar() {
if (...) {
return 1;
} else {
return 2;
}
}
切换问题可以通过default
案例解决,但你可以说这里不需要。在切换的情况下涵盖所有枚举值。对switch语句的静态分析是否知道,在穷举交换机中返回后,switch语句后的代码块无法访问?
我试着查看language spec,但我没有清楚地看到这一点。
答案 0 :(得分:0)
嗯,Java本身并不像其他语言(如C / C ++或.NET)那样实现枚举。它们只是(最终)类的实例。实际上,您的运算符==
会比较引用相等而不是您可能建议的整数值。
这就是为什么switch语句不完整的原因。引用可能只是null
。
此外,您可能已经使用公共构造函数定义了自己的枚举类,该构造函数可能会创建任意数量的实例。
顺便说一下:实现foo
方法的最简单方法是
int foo(MyEnum e)
{ return e.ordinal() + 1;
}
但请注意.ordinal()
不会返回与枚举常量相关的任何值。它只是定义的索引。