考虑以下代码:
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语句的静态分析是否知道,在穷举switch中返回的情况下,switch语句之后的代码块是无法访问的?
我试着查看language spec,但我没有清楚地看到这一点。
发布于 2018-05-30 23:29:50
当然,Java本身并不像C/C++或.NET那样实现枚举,它们只是一个(最终)类的实例。因此,实际上,您的运算符==
比较的是引用相等,而不是您可能建议的整数值。
这就是switch语句不完整的原因。引用可能只是null
。
此外,您可能已经使用公共构造函数定义了自己的enum类,该构造函数可以创建任意数量的实例。
顺便说一句:到目前为止实现foo
方法的最简单方法是
int foo(MyEnum e)
{ return e.ordinal() + 1;
}
但请注意,.ordinal()
不会返回与枚举常量相关的任何值。它只是按定义顺序排列的索引。
https://stackoverflow.com/questions/50607799
复制相似问题