【发布时间】:2016-08-30 10:52:53
【问题描述】:
假设,我们有switch语句,它完全覆盖了枚举参数的所有可能情况,并且也有null-check,不会被编译为"Missing return statement"的原因。
enum Foo {ONE,TWO}
int fooToInt(Foo foo) {
if (foo == null) {
throw new NullPointerException();
}
switch (foo) {
case ONE: return 1;
case TWO: return 2;
}
}
我知道,从default case 或枚举之后抛出异常,或者访问枚举元素而不是switch 将解决问题。但我不明白这种行为的技术原因:显然,没有可能的执行分支,这不会导致return 或throw。此外,在某些情况下,编译时检查是否涵盖了所有情况也会很棒。
【问题讨论】:
-
您可能希望在每个案例之后或至少在最后一个案例之后
break。 -
真的没必要写
if (foo == null) { throw new NullPointerException(); },考虑到当switch(foo)被执行并且foo是null时会发生什么…… -
Holger,写它只是为了表明所有可能的分支都被明确地覆盖了。
标签: java enums switch-statement