使用从枚举初始化的字符串常量的切换案例的问题

时间:2018-08-29 06:00:34

标签: java android enums switch-statement constants

我的代码中有一个转换用例,其中有用String常量定义的用例。
如果我将String常量初始化为

String INACTIVE = "INACTIVE";  

开关盒工作正常。

但是,如果我使用枚举作为

初始化String常量,
String INACTIVE = State.INACTIVE.name();

我在switch案例中看到一个编译时错误

  

需要常量表达式

我正在使用MVP架构,而状态枚举只能在Presenter中使用,而我的切换案例在Activity视图中。

我不想在视图中重复枚举,同时要记住代码维护问题。

这迫使我为我的切换情况分别定义String常量,但是这不允许我使用State枚举值初始化常量。

提前感谢任何有用的建议和解决方案。

1 个答案:

答案 0 :(得分:1)

这样做:

public enum State {
    INACTIVE {
        @Override
        public int getId() {
            return 0;
        }
    },
    ACTIVE {
        @Override
        public int getId() {
            return 1;
        }
    },
    CURRENT {
        @Override
        public int getId() {
            return 2;
        }
    };

    public abstract int getId();

    public State getStateById(int id) {
        if (id == 0) {
            return INACTIVE;
        } else if (id == 1) {
            return ACTIVE;
        } else if (id == 2) {
            return CURRENT;
        }
        // this should never happen
        throw new RuntimeException("Shouldn't");
    };
}

因此,基本上,您使用一个ID在Presenter和ActivityView之间传递,然后使用枚举类本身来解析该ID并检索该枚举,您可以在切换案例中直接使用它。 在我的示例中,我仅使用int来显示所有详细信息,但是如果您依赖getName()并直接解析String,则根本不需要覆盖任何方法。