9

Enum#toStringjavadocに次のように記載されていることに気付きました(強調は私のものです):

宣言に含まれる、この列挙型定数の名前を返します。このメソッドはオーバーライドできますが、通常は不要または望ましくありません。より「プログラマーに適した」文字列形式が存在する場合、列挙型はこのメソッドをオーバーライドする必要があります。

デフォルトでは、同じものtoString()name()返すため、toStringオーバーライドされた後でも、name()メソッドを介して列挙型の名前にアクセスできます。

Enum#toStringオーバーライドが望ましくない理由を誰かが知っていますか?

編集:参考までに、name()のjavadoc(元の強調):

enum 宣言で宣言されているとおりに、この enum 定数の名前を返します。ほとんどのプログラマーは、toString() メソッドがよりユーザーフレンドリーな名前を返す可能性があるため、これよりも toString() メソッドを使用する必要があります。このメソッドは主に、リリースごとに異なることのない正確な名前の取得に依存する特殊な状況で使用するために設計されています。

4

3 に答える 3

3

列挙型を使用すると、特定の定数値のセットが得られます。そのtoString列挙型に対してメソッドが呼び出されると、通常、名前が返されることが期待されるため、toStringメソッドを上書きすると、予期しない結果が返されます。

于 2012-06-01T15:35:25.600 に答える
2

列挙型が名前だけよりも複雑な場合 (たとえば、プライベート フィールドが含まれている場合)、toSting()オーバーライドしてこれらを出力し、その名前だけでなく列挙型フィールドのより良い説明を与えることができます。

于 2012-06-01T15:44:11.167 に答える
1

ここでの「望ましい」という言葉の意味に関して、単純に混乱があると思います。javadoc は基本的に同じことを 2 回述べています。toString() をオーバーライドすることは、通常、列挙型が機能するために必要ではないため、そうすることは有用ではありません (望ましいことではありません)。

したがって、あなたの質問に答えるには、次の場合に toString() をオーバーライドすることは望ましくありません: A) 列挙型の名前の文字列表現を表示する必要がないことがわかっている場合、または B) デフォルトの文字列表現で列挙型を識別するのに十分である場合これが必要な場合。

于 2012-06-01T16:14:53.900 に答える