167

のドキュメントを読んだ後、いつname()を使用するのか、いつtoString()String java.lang.Enum.name()を使用するのか理解できません。

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

特に、ドキュメンテーションには を好むと書かれていますがtoString()、Java 独自のStandardLocation列挙はname、ドキュメンテーションで別の方法が提案されていると思われる場合に使用します。

public String getName() { return name(); }

さらに、次のようにEnum実装toString()します。

public String toString() {
    return name;
}

そして、ユーザー定義の列挙が上書きされ、ほとんどの場合まったく同じになる状況は考えられtoString()ませname()toString()

  1. ドキュメントを無視して常に使用name()することが悪い考えである理由を説明してください。
  2. 「リリースごとに変わらない」というフレーズはどうですか。名前が変わらない場合、それは変わることを意味しjava.lang.Enum.toString()ますか?
4

3 に答える 3

32

ユーザー (ログを見ている開発者を含む) に情報を提示する場合は、 toString()を使用します。toString()コードで特定の値を指定することに依存しないでください。特定の文字列に対してテストしないでください。誰かがtoString()リターンを正しく変更したときにコードが壊れた場合、それはすでに壊れています。

enum 定数の宣言に使用される正確な名前を取得する必要がある場合は、オーバーライドされている可能性があるため、 name()を使用する必要があります。toString

于 2013-08-03T09:08:34.893 に答える
21

toStringユーザーに名前を表示する必要がある場合に使用します。

プログラムname自体の名前が必要な場合に使用します。たとえば、異なる列挙値を識別して区別する場合などです。

于 2013-08-03T09:01:08.930 に答える