0

いくつかの調査を行った後、Java 1.5以降、「定数」クラスで宣言された列挙型で定数(またはキープロパティ)を管理することが望ましいことがわかりました。

これらの列挙型を実装して、型に関係なく列挙型の要素の値をできるだけ単純に取得する適切な方法を知りたいです。

例: Messages が「Constant.Messages.WARNING」の値を持つことは可能ですか?

public enum Messages {

    WARNING("main.message.warning")

}

ありがとうございました。

4

5 に答える 5

3

いくつかのメソッドを実装することでそれを行うことができます。コンストラクターとゲッターが必要です。

public enum Messages {
    WARNING("main.message.warning");

    private String message;

    Messages (String message) { this.message = message; }

    public String get() { return this.message; }
}

これで、次のように記述できます。

String msg = Messages.WARNING.get();
于 2013-01-09T17:28:22.280 に答える
3

いくつかの例外を除いて、enum を Java の他のクラスとしてカスタマイズできます。

同じ例を使用しますが、toStringなしで使用するため、が呼び出される場所 (たとえば、または任意のロギング メソッド)getMessageで列挙型を使用できます。toStringSystem.out.println

public enum Messages
{
    WARNING("main.message.warning"),
    ERROR("main.message.error");

    private final String message;

    // Parameters to the enum constructors are the ones in the enum "definition"
    Messages(final string message)
    {
        this.message = message;
    }

    @Override
    public String toString()
    {
        return message;
    }
}
于 2013-01-09T17:34:36.437 に答える
2

はい、そうですが、この場合、これ"main.message.warning"は列挙型のインスタンスメンバーです。

public enum Messages
{
    WARNING("main.message.warning"),
    ERROR("main.message.error");

    private final String message;

    // Parameters to the enum constructors are the ones in the enum "definition"
    Messages(final string message)
    {
        this.message = message;
    }

    public String getMessage()
    {
        return message;
    }
}

これらのコンストラクターはすべて、JVMの起動時に呼び出されることにも注意してください。プログラムが「準備完了」になると、列挙値はすべてそこにあります。

于 2013-01-09T17:30:00.483 に答える
2
public enum Messages {

    WARNING("main.message.warning")
    private String message;
    Messages(String message) {
        this.message = message
    }
    String getMessage() {
        return this.message;
    }
}

そして結局のところ、あなたはできる

Messages.WARNING.getMessage()
于 2013-01-09T17:29:36.940 に答える
0

Java コンパイラは舞台裏でいくつかの魔法を行っているため、enum遭遇すると少し奇妙に感じます。プライベート コンストラクターを使用して、任意の追加データを追加できます。次に例を示します。

public enum Messages {

    WARNING("main.message.warning");

    private final String key;

    private Messages(String key) { this.key = key; }
    public String getKey() { return key; }
}
于 2013-01-09T17:28:47.390 に答える