Java 定义为字符串的嵌套枚举

Java 定义为字符串的嵌套枚举,java,enums,Java,Enums,我面临嵌套枚举的问题。所以,我有一个嵌套的枚举,它有默认值,如您所见。以前只有像CD和CMs这样的枚举。现在,我为它的每一个都设置了类似于定义的内容,正如您可以看到的“酷炫Ds”等。目前,我面临一个无法读取枚举字符串的问题,该字符串位于()中,我不知道如何修复它。有人有主意吗 package com.test.beans; import java.io.Serializable; import com.fasterxml.jackson.annotation.JsonIgnorePr

我面临嵌套枚举的问题。所以,我有一个嵌套的枚举,它有默认值,如您所见。以前只有像CD和CMs这样的枚举。现在,我为它的每一个都设置了类似于定义的内容,正如您可以看到的“酷炫Ds”等。目前,我面临一个无法读取枚举字符串的问题,该字符串位于()中,我不知道如何修复它。有人有主意吗

 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”与括号中的enum字符串进行比较,而是将其与纯enum或CD和CMs进行比较


我的用例是这样的。我正在使用spark streaming,其中数据传入到我的RecordBean类,并与我的枚举类型进行比较。因为数据库中的类型从CMs更改为Cool Ms,所以我需要在我的应用程序中通过向Enum添加定义来更改相同的类型。之后,我无法完成应用程序将处理枚举(如CMs)并读取其定义或酷炫Ms的部分。请确保,您可以使用:CDs.getTypes()和CMs.getTypes()

进行阅读猜测:可能框架正在对您的枚举常量调用toString(),因此您可能需要添加:

public enum Types {
 ...
 @Overrride 
 public String toString() { return s; }
换句话说:确保您现有的枚举常量确实使用了“新”更改的字符串名称


但除此之外:考虑退步和改变你的总体设计。您的问题并不少见-从编程的角度来看,枚举很好(例如:使用枚举常量可以产生更干净的代码);但是:它们不适合持久性。使用Enum进行版本控制是一件痛苦的事情。

不幸的是,我不知道您到底在问什么……我更新了它并设置了错误,也许现在已经很清楚了?:)寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参见:如何创建。你的更新有帮助,但仍然只是我们可能需要的东西的一半。更新no2,很好吗?可能是Noup的重复,我得到了
不兼容的类型:java.lang.String不能转换为com.test.beans.RecordBean.types
是的,我知道你说的版本控制,但现在我只需要原型,然后我会重新设计整个应用程序。另外,我尝试了你的猜测,但是错误仍然在这里。我想你应该添加一些跟踪语句,比如在枚举的每个方法中。。。只是为了看看所谓的;如果有什么事情你可以轻松地做。我正在考虑添加额外的枚举常量;可能使用的字符串与CD和CM最初使用的字符串相同。嗯,这是我最初的想法,我只想返回例如:“Cool Ds”,但在enum中,否则我需要更改很多我现在不需要的东西。如果您想用任何简单的步骤来解决这个问题,我将尝试使用JSONValue注释,比如:)请放心;如果我有更好的想法;我早就告诉你了-(