0

我有以下枚举:

public enum Rank{
   FIRST,
   SECOND
}

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

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

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

4

6 回答 6

5

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

@Override public String toString() {
  return this.name() + "_RANK";
}
于 2012-10-16T08:52:45.987 回答
2

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

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

从文档:

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

于 2012-10-16T08:53:33.123 回答
1
@Override
public toString(){
  return super.toString() + "_RANK";
}
于 2012-10-16T08:52:46.923 回答
1

尝试

@Override
public toString(){
  return super.toString() + "_RANK";
}
于 2012-10-16T08:54:02.123 回答
1

将此添加到您的枚举中

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

toString() 应该返回String

于 2012-10-16T08:58:09.140 回答
1

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

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

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

于 2012-10-16T09:09:51.490 回答