当前位置: 首页 > 知识库问答 >
问题:

在开关情况下使用枚举值的字符串表示

任长卿
2023-03-14

为什么在开关情况下不能将枚举值用作字符串?(或者这有什么问题:)

String argument;
switch (argument) {
    case MyEnum.VALUE1.toString(): // Isn't this equal to "VALUE1" ?
    // something    
break;
    case MyEnum.VALUE2.toString():
    // something else
break;

共有3个答案

白高逸
2023-03-14

为了补充PeterLawrey的评论,请看一看去年的这篇文章,它讨论了JDK7前后在Java中切换字符串的问题。

荀嘉熙
2023-03-14

病例髓鞘。VALUE1.toString()://这不是等于“VALUE1”吗?

不,不一定:您可以自由提供自己的实现

public enum MyType {
VALUE1 {
    public String toString() {
        return "this is my value one";
    }
},

VALUE2 {
    public String toString() {
        return "this is my value two";
    }
}

}

此外,维护您代码的人可以在您离开公司后添加此实现。这就是为什么您不应该依赖String值,而应该坚持使用您的枚举常量MyEnum. VALUE1MyEnum. VALUE2等表示的数值。

车嘉实
2023-03-14

只能使用编译时已知的字符串。编译器无法确定该表达式的结果。

也许你可以试试

String argument = ...
switch(MyEnum.valueOf(argument)) {
   case VALUE1:

   case VALUE2:
 类似资料:
  • 我想在开关情况下使用以下枚举作为引用: 善良的看待沃尔菲

  • 问题内容: 我定义了以下枚举 现在的印刷价值是 相反,我想打印枚举的值 要实现此功能可以做些什么? 问题答案: 您正在打印枚举 对象 。如果只想打印该属性,请使用该属性: 请参阅 对枚举成员及其属性 的 编程访问权限 部分 : 如果您有枚举成员并需要其名称或值: 如果只需要提供自定义字符串表示形式,则可以向枚举添加方法: 演示:

  • 问题内容: 我觉得这是一个简单的问题,但是我尝试过的所有事情都不适合我。我有一个枚举,我有字符串构造函数的原因是因为Java不允许枚举为数字..我在没有字符串构造函数的情况下直接尝试了AA,AB,2C,但这给出了错误。请注意,对于现有的枚举,我要添加C(“ 2C”)。 现在我有一个mybatis映射器,它会进行合并,这是现有的,并且映射器的参数之一是TestEnum。到目前为止,由于枚举值和字符串

  • 在尝试获取allowableValues标记的枚举值时,我遇到了以下错误。 批注属性apimodelProperty.AllowAbleValues的值必须是常量表达式 我想做的是: 我有可能做我想做的事吗?我知道在我的API中只公开枚举是可能的,然后swagger会自动识别允许的值,但是需要将有问题的字段公开为字符串,即使我们的内部逻辑将其作为枚举。 提前感谢您的帮助!

  • 问题内容: 为什么在切换情况下无法将枚举值用作字符串?(或者这有什么问题:) 问题答案: 您只能使用编译时已知的字符串。编译器无法确定该表达式的结果。 也许你可以尝试

  • 假设我有一个简单的注释: 和枚举: 我不能这样使用这个注释: 如果说“它必须是一个编译过的时间常数”,这段代码就会失败。我确实理解为什么会发生这种情况,而且我知道JSL中关于编译时间常数的部分。 我的问题是,为什么不按照规范将枚举作为编译时间常数,原因是什么。你不能更改枚举名。。。 库马尔编辑