假设,我们有switch语句,它完全涵盖了枚举参数的所有可能情况,并且也进行了空检查,不会被编译成“缺少返回语句”的原因.
enum Foo {ONE,TWO} int fooToInt(Foo foo) { if (foo == null) { throw new NullPointerException(); } switch (foo) { case ONE: return 1; case TWO: return 2; } }
我知道,从默认情况下或枚举后抛出异常,或访问枚举元素而不是切换将解决问题.但我不明白这种行为的技术原因:显然,没有可能的执行分支,这不会导致返回或抛出.在某些情况下,编译时检查是否涵盖所有案例都会很棒.