加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在Java中对枚举进行完全切换会产生“缺少返回语句”错误

发布时间:2020-05-25 15:16:37 所属栏目:Java 来源:互联网
导读:假设,我们有switch语句,它完全涵盖了枚举参数的所有可能情况,并且也进行了空检查,不会被编译成“缺少返回语句”的原因. enum Foo {ONE,TWO}int fooToInt(Foo foo) { if (foo == null) { throw new NullPointerException(); } switch (foo) {

假设,我们有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;
    }
}

我知道,从默认情况下或枚举后抛出异常,或访问枚举元素而不是切换将解决问题.但我不明白这种行为的技术原因:显然,没有可能的执行分支,这不会导致返回或抛出.在某些情况下,编译时检查是否涵盖所有案例都会很棒.

解决方法

编译器不会检查您是否已将Foo中的所有常量列为大小写块,从而引发错误.

假设Foo被定义为:

enum Foo {ONE,TWO,THREE}

那么,如果你传递Foo.THREE作为参数,你的方法会返回什么?

作为切换方法的替代方法,您可以在Foo枚举中添加一个int成员,并为每个常量设置相应的数字:

enum Foo {
    ONE(1),TWO(2);

    int value;
    Foo(int value) {
        this.value = value;
    }
}

这样你就不需要开关了,编译器会请你为任何可能的新Foo常数设置一个相应的数字.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读