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";
}

ドキュメントから:

enum 宣言で宣言されているとおりに、この enum 定数の名前を返します。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 に答える