嵌套枚举,定义为String

时间:2017-04-10 12:13:46

标签: java enums

我遇到嵌套枚举的问题。所以,我有一个嵌套的枚举,它有默认值,你可以看到。之前只有像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 并阅读其定义或酷女士

2 个答案:

答案 0 :(得分:0)

请确保,您可以阅读:CDs.getTypes()和CMs.getTypes()

答案 1 :(得分:0)

猜测:也许框架在你的枚举常量上调用toString(),因此你可能想要添加:

public enum Types {
 ...
 @Overrride 
 public String toString() { return s; }

换句话说:确保您现有的枚举常量确实使用了“新”更改的字符串名称。

但除此之外:考虑退一步并改变整体设计。你的问题并不罕见 - 从编程的角度来看,枚举很好(如:使用枚举常量导致更清晰的代码);但是:它们适合持久性。使用枚举进行版本控制很糟糕。