默认情况下,将Java枚举打印为小写,保持枚举常量为大写
我想序列化JAVA中的一个枚举,这样当我从代码中的任何地方调用它时,我就会得到名称的小写表示 假设我有以下枚举:默认情况下,将Java枚举打印为小写,保持枚举常量为大写,java,enums,Java,Enums,我想序列化JAVA中的一个枚举,这样当我从代码中的任何地方调用它时,我就会得到名称的小写表示 假设我有以下枚举: public enum Status { DRAFT, PENDING, COMPLETE; } println ("Status=" + Status.DRAFT); 我想得到以下信息: Status=draft [注意]:我想使用大写的枚举常量,在请求值时使用小写表示。我自己回答这个问题,因为我发现解决方案很有趣,在网站上找不到答复。以防万一有人想办法解决这个问题 解
public enum Status {
DRAFT, PENDING, COMPLETE;
}
println ("Status=" + Status.DRAFT);
我想得到以下信息:
Status=draft
[注意]:我想使用大写的枚举常量,在请求值时使用小写表示。我自己回答这个问题,因为我发现解决方案很有趣,在网站上找不到答复。以防万一有人想办法解决这个问题 解决方案很简单,只需如下重写Enum toString方法:
public enum Status {
DRAFT, PENDING, COMPLETE;
@Override
public String toString() {
return name().toLowerCase();
}
}
println ("Status=" + Status.DRAFT);
这将以小写形式输出名称。如果您想要小写,您可以使用小写、混合大写或任何对您更有意义的形式
public enum Status {
draft, pending, complete;
}
println ("Status=" + Status.draft);
印刷品
Status=draft
另一个解决办法可以是:
public enum Status {
DRAFT, PENDING, COMPLETE;
public String nameLowerCase(){
return name().toLowerCase();
}
}
您可以使用下面的枚举类,该类包含每个枚举常量的名为和序号的构造函数。可以为枚举常量指定所需的值
public enum Status {
DRAFT(0,"draft"), PENDING(1,"pending"), COMPLETE(2,"complete");
private int key;
private String value;
Status(int key, String value){
this.key = key;
this.value = value;
}
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString(){
return this.value;
}
}
因为我们重写了toString
方法,所以返回的值是小写的
使用
将打印
Status = draft
及
将打印
Status = DRAFT
这不会将枚举序列化为小写。这将以小写形式打印其名称。只是翻译错误,英语不是我的母语,对不起。好的,没问题。我也正在学习英语:)嗨,彼得,谢谢你的回复,但是请看下面的我,我通过重写枚举toStand函数来解决它。您的回答并不能解决我的问题,因为我希望使用大写的常量枚举,但在请求实际值时,请使用小写表示。IMHO大写或小写更具可读性,并且更适合输入输出或代码。它确实回答了这个问题,因为你没有说你需要大写的常量。你是对的,我没有指定我想要大写的常量,我认为这很明显。我编辑了这个问题。谢谢这不是一个很好的解决方案(尽管有向上投票),因为现在
toString()
和name()
不再返回相同的值。诚然,这并没有说他们应该做什么,但他们做的是他们的默认行为。此外,通过重写toString()
您只捕获示例中的代码使用,这是一种隐式契约。那不是干净的设计。既然你不能重写name()
,我宁愿提供一个像lowerCaseName()
这样的新方法。这绝对是一个干净的方法,否则toString将无法重写,它对我来说是可以正常工作的。我不想在代码中使用小写的新方法,我想直接获取小写值。只是developer的偏好问题。toString在所有对象上都是可重写的,这并不能使您适当地使用它。我必须同意Marcel的观点,事实上,由于您似乎希望从enum中获得一个可读的标签,所以您应该输入一个getLabel()方法。然后就有了一个定义良好的方法和一个定义良好的返回值。toString()不是这两种类型的函数,它只在一些极其有限的情况下使用,其中对象值的格式实际上是标准格式,如整数、布尔值和字符串。除了这几个附带的情况之外,您永远不应该依赖toString()的输出。您可以在Google应用程序(即:)中找到类似的用法,它们覆盖某些对象的toString函数以获得所需的字符串。我再说一遍:这只是开发人员偏好的问题,只要对我来说有很好的文档记录,它就是一个有效的解决方案。正如本文中明确指出的,name()实际上是用来返回声明的枚举的原始名称的,它被标记为final,开发人员知道它不会被重写,而toString()是有意的(甚至是受鼓励的)用于返回“友好”名称,因此此用法似乎符合建议-无需将值
存储为单独的字符串,因为您只需调用name().toLowerCase()
。
System.out.print("Status = "+Status.DRAFT.name());
Status = DRAFT