【问题标题】:Use of enum in switch case but not as switch-argument在开关情况下使用枚举但不作为开关参数
【发布时间】:2018-05-08 11:14:36
【问题描述】:

我想在 switch 案例中使用以下枚举作为参考:

public final enum myEnum {
    VALUE1,
    VALUE2,
    VALUE2,
    ...
}

我已经在互联网上搜索了很长时间,但只找到了在 switch 语句中使用 enum 并将 case 语句作为参数的示例。我只想使用枚举的值作为 case 语句的参数,switch 参数是另一个变量。像这样的:

String otherVariable = "VALUE2";
switch (otherVariable) {
    case myEnum,VALUE1.toString():
        ...
        break;
    case myEnum,VALUE2.toString():
        ...
        break;
    default:
        ...
        break;

当我直接编写代码时,我收到一个错误“case 表达式必须是常量表达式”。我究竟做错了什么?我该如何实现?

亲切的问候 狼狗

【问题讨论】:

    标签: java enums switch-statement


    【解决方案1】:

    你想要的大概是

    String other = "VALUE2";
    
    MyEnum myEnum = MyEnum.valueOf(other);
    switch (myEnum) {
        case VALUE1:
        ...
        case VALUE2:
        ...
    }
    

    你不能使用myEnum.toString(),因为它是一个方法调用,它可以在调用之间产生不同的结果(即非常量)。

    【讨论】:

    • 嗨大牛,不,这不起作用。现在我收到一个错误:“无法从 MyEnum 转换为 MyEnum。也许值得注意的是枚举被声明为类的成员,我在该类的方法中调用枚举。
    • @WolfiG 抱歉,我的case 声明中有错字。我不确定您所说的“班级成员”是什么意思; enum(如MyEnum)基本上是一个类,所以你只能有一个内部枚举;或者您可以将枚举值作为成员,这不应该真正有所作为。
    • 关于内部枚举你是对的。我发现了诀窍:作为案例属性,您需要使用 VALUE1 而不是 MyEnum.VALUE1。也许你会调整你的答案。
    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多