为什么在开关情况下不能将枚举值用作字符串?(或者这有什么问题:)
String argument;
switch (argument) {
case MyEnum.VALUE1.toString(): // Isn't this equal to "VALUE1" ?
// something
break;
case MyEnum.VALUE2.toString():
// something else
break;
为了补充PeterLawrey的评论,请看一看去年的这篇文章,它讨论了JDK7前后在Java中切换字符串的问题。
病例髓鞘。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. VALUE1
、MyEnum. VALUE2
等表示的数值。
只能使用编译时已知的字符串。编译器无法确定该表达式的结果。
也许你可以试试
String argument = ...
switch(MyEnum.valueOf(argument)) {
case VALUE1:
case VALUE2:
我想在开关情况下使用以下枚举作为引用: 善良的看待沃尔菲
问题内容: 我定义了以下枚举 现在的印刷价值是 相反,我想打印枚举的值 要实现此功能可以做些什么? 问题答案: 您正在打印枚举 对象 。如果只想打印该属性,请使用该属性: 请参阅 对枚举成员及其属性 的 编程访问权限 部分 : 如果您有枚举成员并需要其名称或值: 如果只需要提供自定义字符串表示形式,则可以向枚举添加方法: 演示:
问题内容: 我觉得这是一个简单的问题,但是我尝试过的所有事情都不适合我。我有一个枚举,我有字符串构造函数的原因是因为Java不允许枚举为数字..我在没有字符串构造函数的情况下直接尝试了AA,AB,2C,但这给出了错误。请注意,对于现有的枚举,我要添加C(“ 2C”)。 现在我有一个mybatis映射器,它会进行合并,这是现有的,并且映射器的参数之一是TestEnum。到目前为止,由于枚举值和字符串
在尝试获取allowableValues标记的枚举值时,我遇到了以下错误。 批注属性apimodelProperty.AllowAbleValues的值必须是常量表达式 我想做的是: 我有可能做我想做的事吗?我知道在我的API中只公开枚举是可能的,然后swagger会自动识别允许的值,但是需要将有问题的字段公开为字符串,即使我们的内部逻辑将其作为枚举。 提前感谢您的帮助!
问题内容: 为什么在切换情况下无法将枚举值用作字符串?(或者这有什么问题:) 问题答案: 您只能使用编译时已知的字符串。编译器无法确定该表达式的结果。 也许你可以尝试
假设我有一个简单的注释: 和枚举: 我不能这样使用这个注释: 如果说“它必须是一个编译过的时间常数”,这段代码就会失败。我确实理解为什么会发生这种情况,而且我知道JSL中关于编译时间常数的部分。 我的问题是,为什么不按照规范将枚举作为编译时间常数,原因是什么。你不能更改枚举名。。。 库马尔编辑