列挙値を文字列リテラルとして使用する 質問する

列挙値を文字列リテラルとして使用する 質問する

Enum に格納されている値を文字列リテラルとして使用する最適な方法は何ですか? 例:

public enum Modes {
    some-really-long-string,
    mode1,
    mode2,
    mode3
}

その後、 を使用してMode.mode1その文字列表現を として返すことができますmode1。 を呼び出し続ける必要はありませんMode.mode1.toString()

ベストアンサー1

できません。ここでは 4 つのオプションがあると思います。4 つすべてがソリューションを提供しますが、アプローチが少し異なります...

オプション 1:列挙型の 組み込みを使用しますname()。特別な命名形式が必要ない場合は、これで十分です。

    String name = Modes.mode1.name(); // Returns the name of this enum constant, exactly as declared in its enum declaration.

オプション2: より細かい制御が必要な場合は、列挙型にオーバーライドプロパティを追加します。

public enum Modes {
    mode1 ("Fancy Mode 1"),
    mode2 ("Fancy Mode 2"),
    mode3 ("Fancy Mode 3");

    private final String name;       

    private Modes(String s) {
        name = s;
    }

    public boolean equalsName(String otherName) {
        // (otherName == null) check is not needed because name.equals(null) returns false 
        return name.equals(otherName);
    }

    public String toString() {
       return this.name;
    }
}

オプション 3: enum の代わりに static final を使用する:

public final class Modes {

    public static final String MODE_1 = "Fancy Mode 1";
    public static final String MODE_2 = "Fancy Mode 2";
    public static final String MODE_3 = "Fancy Mode 3";

    private Modes() { }
}

オプション 4: インターフェースのすべてのフィールドに public、static、final が設定されます。

public interface Modes {

    String MODE_1 = "Fancy Mode 1";
    String MODE_2 = "Fancy Mode 2";
    String MODE_3 = "Fancy Mode 3";  
}

おすすめ記事