我有以下枚举:
public enum Rank{
FIRST,
SECOND
}
每当在枚举上调用toString()
函数(或在字符串文字中使用它)时,我希望返回 FIRST_RANK (而不是字符串' FIRST ',默认情况下)。如果我覆盖toString()
函数,如:
@Override
public String toString(){
return this.toString() + "_RANK";
}
但这显然会导致递归。问题是我需要使用枚举的默认toString()
实现,并且没有我可以调用toString()
的超类枚举。
答案 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()
完全相同......但在我看来,这更好地反映了在这种情况下的面向对象编程。