`Enum.name()` と `Enum.toString()` の違いは何ですか? [重複] 質問する

`Enum.name()` と `Enum.toString()` の違いは何ですか? [重複] 質問する

のドキュメントを読んだ後、String java.lang.Enum.name()いつ使用すればよいのかよくわかりません。名前()そしていつ使うか文字列を変換する()

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

特に、ドキュメントでは を優先するように書かれていますがtoString()、Java独自の標準ロケーションnameドキュメントでは別の方法が提案されていると思われる場合に列挙を使用します。

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

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

public String toString() {
    return name;
}

toString()ユーザー定義の列挙によって上書きされname()toString()ほとんど常にまったく同じになるような状況は考えられません。

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

ベストアンサー1

name()との主な違いは、toString()はメソッドname()であるfinalため、オーバーライドできないことです。toString()メソッドは、デフォルトで と同じ値を返しますname()が、toString()Enum のサブクラスによってオーバーライドできます。

したがって、フィールド自体の名前、使用してくださいname()フィールドの値の文字列表現、 使用toString()

例えば:

public enum WeekDay {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;

    public String toString() {
        return name().charAt(0) + name().substring(1).toLowerCase();
    }
}

この例では、WeekDay.MONDAY.name()「MONDAY」を返し、WeekDay.MONDAY.toString()「Monday」を返します。

WeekDay.valueOf(WeekDay.MONDAY.name())を返しますWeekDay.MONDAYが、WeekDay.valueOf(WeekDay.MONDAY.toString())をスローしますIllegalArgumentException

おすすめ記事