-4

我有以下枚举:

private static enum CD1 { CC, COR, PO };
private static enum CD2 { OMA, PBO, VAR };
private static enum CD3  { USD, EUR, GBP };
private static enum CD4  { IR, CD, COT };

当我说 CD1.CC 时,我要的是 CC,而不是 0;

我不想在每个枚举中都放置一个构造函数并覆盖 toString 以返回值;

private static enum CD1 { 
 CC("CC"), COR("COR"), PO("PO") ; 
 private String val;

 CD1(String val); this.val = val;

 public String toString() {
  return val;
 }

有没有办法将其泛化,这样我就不必为每个枚举编写构造函数了?

编辑:

有没有办法避免使用 enumVal.name() ?我打算只使用 enum.enumVal。但是,想知道这是否可能。抱歉,问题没有说清楚。

4

3 回答 3

2

利用

enumVal.name()

这是内置在 Java 枚举中的

于 2013-06-24T16:30:54.507 回答
0

正如其他人所说,您可以使用 name() 方法获取您决定用于枚举常量的标签。

name() 旨在返回标签。此方法旨在用于依赖此表示的程序和应用程序。

toString() 旨在被程序员覆盖或使用,以创建更“适合最终用户”的信息显示。

听起来你想使用 name() 函数。

于 2013-06-24T16:35:03.020 回答
0

您可以使用该Enum.name()方法或println()直接使用它。

System.out.println(CD1.COR); // prints: COR

如果您不想name()显式调用;只是覆盖toString()
刚刚挖到源代码;原来这是默认行为(@Puce 指出)

public final String name() {
    return name;
}

public String toString() {
    return name;
}

不同的是name()不能被覆盖。

于 2013-06-24T16:31:12.293 回答