22

I have an enum in Java I'd like to serialize, so that when I call it from anywhere in the code, I get the lowercase representation of the name.

Let's say I have the following enum:

public enum Status {
    DRAFT, PENDING, COMPLETE;
}
println ("Status=" + Status.DRAFT);

I'd like to get the following:

Status=draft

[Note]: I want to use the enum constants in uppercase, and when requesting the value get the lowercase representation.

4

4 回答 4

56

我自己回答这个问题,因为我发现这个解决方案很有趣,但在网站上找不到回复。以防万一其他人寻找解决此问题的方法。

解决方案很简单,只需像这样覆盖 Enum toString 方法:

public enum Status {
    DRAFT, PENDING, COMPLETE;

    @Override
    public String toString() {
        return name().toLowerCase();
    }
}
println ("Status=" + Status.DRAFT);

这将以小写形式输出名称。

于 2013-11-10T19:29:30.933 回答
16

另一种解决方案可能是:

public enum Status {
  DRAFT, PENDING, COMPLETE;

  public String nameLowerCase(){
        return name().toLowerCase();
    }
}
于 2014-11-12T17:36:11.357 回答
7

如果你想要小写,你可以只使用小写,或者混合大小写,或者任何对你更有意义的东西。

public enum Status {
    draft, pending, complete;
}

println ("Status=" + Status.draft);

印刷

Status=draft
于 2013-11-10T19:37:03.737 回答
-2

您可以使用以下 Enum 类,其中包含每个枚举常量的名称和序号的构造函数。您可以为枚举常量分配所需的值。

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方法,因此返回了小写的值。

使用

System.out.print("Status = "+Status.DRAFT);

会打印,

Status = draft

System.out.print("Status = "+Status.DRAFT.name());

会打印

Status = DRAFT
于 2016-09-01T14:15:22.367 回答