在Java中,如何在枚举本身中获取枚举的值?

时间:2010-02-23 21:11:59

标签: java enums tostring

我想为我的枚举toString()覆盖Color。但是,我无法弄清楚如何在Color枚举中获取Color实例的值。有没有办法在Java中做到这一点?

示例:

public enum Color {
    RED,
    GREEN,
    BLUE,
    ...

    public String toString() {
        // return "R" for RED, "G", for GREEN, etc.
    }
}

6 个答案:

答案 0 :(得分:17)

public enum Color {
    RED("R"),
    GREEN("G"),
    BLUE("B");

    private final String str;
    private Color(String s){
        str = s;
    }
    @Override
    public String toString() {
        return str;
    }
}

您可以为Enums使用构造函数。我没有测试语法,但这是个主意。

答案 1 :(得分:15)

您也可以启用this的类型,例如:

public enum Foo { 
  A, B, C, D 
  ; 
  @Override 
  public String toString() { 
    switch (this) { 
      case A: return "AYE"; 
      case B: return "BEE"; 
      case C: return "SEE"; 
      case D: return "DEE"; 
      default: throw new IllegalStateException(); 
    } 
  } 
} 

答案 2 :(得分:4)

Enum.name() - 谁会砸它?

但是,在大多数情况下,将任何额外信息保存在构造函数中设置的实例变量中更有意义。

答案 3 :(得分:3)

使用superString.substring()

public enum Color
{
    RED,
    GREEN,
    BLUE;

    public String toString()
    {
        return "The color is " + super.toString().substring(0, 1);
    }
}

答案 4 :(得分:0)

Java默认为你做这个,它返回.toString()中的.name(),你只需要覆盖toString(),如果你想从名称中得到一些不同的东西。有趣的方法是.name()和.ordinal()和.valueOf()。

做你想做的事情

.toString(this.name().substring(1));

您可能要做的是添加一个名为abbreviation的属性并将其添加到构造函数中,添加一个getAbbreviation()并使用它来代替.toString()

答案 5 :(得分:0)

我发现了这样的东西(未经过测试):

public enum Color {
RED{
public String toString() {
    return "this is red";
}
},
GREEN{
public String toString() {
    return "this is green";
}
},
...   

}

希望它有所帮助!