默认情况下,将Java枚举打印为小写,保持枚举常量为大写

默认情况下,将Java枚举打印为小写,保持枚举常量为大写,java,enums,Java,Enums,我想序列化JAVA中的一个枚举,这样当我从代码中的任何地方调用它时,我就会得到名称的小写表示 假设我有以下枚举: public enum Status { DRAFT, PENDING, COMPLETE; } println ("Status=" + Status.DRAFT); 我想得到以下信息: Status=draft [注意]:我想使用大写的枚举常量,在请求值时使用小写表示。我自己回答这个问题,因为我发现解决方案很有趣,在网站上找不到答复。以防万一有人想办法解决这个问题 解

我想序列化JAVA中的一个枚举,这样当我从代码中的任何地方调用它时,我就会得到名称的小写表示

假设我有以下枚举:

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