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