我遇到嵌套枚举的问题。所以,我有一个嵌套的枚举,它有默认值,你可以看到。之前只有像CD和CM这样的枚举。现在我为每一个设置类似定义的东西,因为你可以看到“酷D”等等。目前我正面临一个我无法读取的问题enums String,它位于()和我不知道如何解决它。有没有人有想法?
package com.test.beans;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class RecordBean implements Serializable {
public enum Types {
CDs("Cool Ds"), CMs("Cool Ms");
private final String s;
private Types(String s) {
this.s=s;
}
public String getTypes(){
return s;
}
public static Types fromNumeric(int index) {
switch (index) {
default:
return null;
case 0:
return Types.CDs;
case 1:
return Types.CMs;
}
}
}
private Types type;
private float value;
public RecordBean() {
// default constructor for default instantiate
}
public RecordBean(Types type, float value) {
this.type = type;
this.value = value;
}
public Types getType() {
return type;
}
public void setType(Types type) {
this.type = type;
}
public float getValue() {
return value;
}
public void setValue(float value) {
this.value = value;
}
}
更新
我得到的错误:
17/04/10 12:44:53 ERROR App$: Can not construct instance of com.test.beans.RecordBean$Types from String value 'Cool Ds': value not one of declared Enum instance names: CDs, CMs ]
因为你可以看到他没有比较我的字符串'Cool Ds'和括号中的字符串String,但是使用纯枚举或 CD 和 CM
我的USE-CASE是这样的。我正在使用spark streaming来将数据传入我的RecordBean类,并在哪里与我的枚举类型进行比较。因为在数据库中将类型从 CM 更改为 Cool Ms ,我需要通过向Enum添加定义来更改我的应用程序中的相同内容。之后我无法完成应用程序处理枚举的部分,如 CMs 并阅读其定义或酷女士
答案 0 :(得分:0)
请确保,您可以阅读:CDs.getTypes()和CMs.getTypes()
答案 1 :(得分:0)
猜测:也许框架在你的枚举常量上调用toString(),因此你可能想要添加:
public enum Types {
...
@Overrride
public String toString() { return s; }
换句话说:确保您现有的枚举常量确实使用了“新”更改的字符串名称。
但除此之外:考虑退一步并改变整体设计。你的问题并不罕见 - 从编程的角度来看,枚举很好(如:使用枚举常量导致更清晰的代码);但是:它们不适合持久性。使用枚举进行版本控制很糟糕。