[解決済み] Java enum - 名前の代わりにtoStringを使用する理由
2022-04-16 16:23:39
質問
enum apiのメソッドを見ると
name()
と書いてあります。
この enum 定数の名前を、enum 宣言で宣言されたとおりに返します。 ほとんどのプログラマは、このメソッドよりも toString メソッドを優先的に使用すべきです。 というのも、toString メソッドはより使いやすい名前を返すことがあるからです。 このメソッドは主に、リリースごとに異なることのない正確な名前を取得する必要がある特殊な状況で使用するために設計されています。
を使用した方が良い理由
toString()
? つまり、name()がすでにfinalである場合、toStringはオーバーライドされる可能性があるということです。つまり、もしあなたが toString を使っていて、誰かがそれをオーバーライドしてハードコードされた値を返したら、アプリケーション全体がダウンしてしまうということです...。また、ソースを見ると、toString()メソッドは正確に名前だけを返します。これは同じことです。
解決方法は?
それは、返された値で何をしたいかに本当に依存します。
-
enum 定数の宣言に使用された正確な名前を取得する必要がある場合は、次のようにします。
name()
としてtoString
が上書きされた可能性があります。 -
enum 定数をユーザフレンドリな方法で表示したい場合は、以下のようにします。
toString
がオーバーライドされている可能性があります(されていないかも!)。
混乱しそうなときは、より具体的な
getXXX
というメソッドを使うなどしています。
public enum Fields {
LAST_NAME("Last Name"), FIRST_NAME("First Name");
private final String fieldDescription;
private Fields(String value) {
fieldDescription = value;
}
public String getFieldDescription() {
return fieldDescription;
}
}
関連
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
-
[解決済み] Java の toString() における StringBuilder と文字列連結の比較
-
[解決済み] Javaでenumを繰り返し処理するためのforループ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラーが報告されました。リソースの読み込みに失敗しました:サーバーは500(内部サーバーエラー)のステータスで応答しました。
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
eclipse アクセス制限です。タイプ 'xxx' は API ではありません(必須ライブラリ '' の制限)。
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
javaコンパイル時のエラー:不正な文字 '\ufeff' に対する解決策です。
-
linux run jarfile Invalid or corrupt jarfile error.
-
アイデア Springboot Web プロジェクトを jar にパッケージ化する場合、Error: 無効または破損した jarfile x.jar 解決策
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
[解決済み] Enum.name()`と`Enum.toString()`の違いは何ですか?[重複]です。