【问题标题】:How to get the enum value with same name as key?如何获取与键同名的枚举值?
【发布时间】:2013-06-24 16:29:28
【问题描述】:

我的枚举如下:

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。但是,想知道这是否可能。抱歉,问题没有说清楚。

【问题讨论】:

  • 我看不出两者有什么区别。枚举的短版本应该产生与长版本相同的东西。你看到的区别是什么?仅供参考,从 toString() 返回 name() 或仅使用 name() 会产生相同的结果。
  • 对于你想要的,你不应该重写 toString() 方法。文档说 - 返回此枚举常量的名称....
  • @BheshGurung 是的,我不必重写 toString()。这是我的疏忽,也许是一个糟糕的问题。谢谢你的回答。
  • 你能解释一下“我打算只使用 enum.enumVal”是什么意思吗?

标签: java generics enums


【解决方案1】:

使用

enumVal.name()

这是内置于 Java 枚举中的

【讨论】:

  • 有没有办法避免使用 enumVal.name() ?我打算只使用 enum.enumVal。但是,想知道这是否可能。抱歉,问题没有说清楚。我会更新我的问题。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    您可以使用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() 不能被覆盖。

    【讨论】:

      猜你喜欢
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多