1. ホーム
  2. java

[解決済み] 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;
    }
}