java - 如何在其toString()函数的覆盖内修改枚举的字符串表示形式?

时间:2012-10-16 08:51:00

标签: java enums override

我有以下枚举:

public enum Rank{
   FIRST,
   SECOND
}

每当在枚举上调用toString()函数(或在字符串文字中使用它)时,我希望返回 FIRST_RANK (而不是字符串' FIRST ',默认情况下)。如果我覆盖toString()函数,如:

@Override
public String toString(){
  return this.toString() + "_RANK";
}

但这显然会导致递归。问题是我需要使用枚举的默认toString()实现,并且没有我可以调用toString()的超类枚举。

6 个答案:

答案 0 :(得分:5)

每当您需要该枚举实例的名称时,您应该使用name()方法。在您的示例中:

@Override public String toString() {
  return this.name() + "_RANK";
}

答案 1 :(得分:2)

您可以使用name()方法吗?

@Override public String toString() {
  return this.name() + "_RANK";
}

来自doc:

  

返回此枚举常量的名称,与其中声明的完全相同   枚举声明。大多数程序员应该使用toString()方法   偏好这个,因为toString方法可能会返回更多   用户友好的名称。此方法主要用于   正确性取决于准确性的特殊情况   名称,不会因版本而异。

答案 2 :(得分:1)

@Override
public toString(){
  return super.toString() + "_RANK";
}

答案 3 :(得分:1)

@Override
public toString(){
  return super.toString() + "_RANK";
}

答案 4 :(得分:1)

在你的枚举

中添加它
 @Override 
 public String toString() {   
       return this.name() + "_RANK"; 
 } 

toString()应该返回字符串

答案 5 :(得分:1)

而不是直接使用名称,我宁愿这样做:

@Override public String toString() {   
    return super.toString() + "_RANK"; 
} 

即使它与在这种情况下使用this.name()完全相同......但在我看来,这更好地反映了在这种情况下的面向对象编程。