web-dev-qa-db-ja.com

javaで列挙型のようなキー値を作成する方法

スペースを含むいくつかの文字列を含むEnumと、intの値を次のように作成する必要があります。

public enum status{
Active(1),
Inactive(2);
}

私はそれをhibernateで使用しており、アルパカjsフォーム用にJSONに変換するためです。

お気に入り:

[{"text": "Inactive", "value":"2"},{"text": "Active", "value":"1"}]

enumの作成に行き詰まっています。そのようなタイプのenumを作る方法は?

7
Saqib Ahmed

文字列の間にスペースを入れることはできません。代わりに、次のようにアンダースコアを使用できます。

In_Active

次のように使用できます。

enum Status {

    ACTIVE("Active", 1), IN_ACTIVE("In Active", 2);

    private final String key;
    private final Integer value;

    Status(String key, Integer value) {
        this.key = key;
        this.value = value;
    }

    public String getKey() {
        return key;
    }
    public Integer getValue() {
        return value;
    }
}
25
Chandana Kumara

1つのenumに複数の値を保持でき、それらを処理するゲッターを使用することもできます。これは私が一度使用した例です(私はそれをあなたの問題に適応させようとします):

public enum Status{

    ACTIVE(1, "Active"),
    INACTIVE(2, "In Active");

    private final Integer value;
    private final String text;

    /**
     * A mapping between the integer code and its corresponding text to facilitate lookup by code.
     */
    private static Map<Integer, Status> valueToTextMapping;

    private Status(Integer value, String text){
        this.value = value;
        this.text = text;
    }

    public static Status getStatus(Integer i){
        if(valueToTextMapping == null){
            initMapping();
        }
        return valueToTextMapping.get(i);
    }

    private static void initMapping(){
        valueToTextMapping = new HashMap<>();
        for(Status s : values()){
            valueToTextMapping.put(s.value, s);
        }
    }

    public Integer getValue(){
        return value;
    }

    public String getText(){
        return text;
    }

    @Override
    public String toString(){
        final StringBuilder sb = new StringBuilder();
        sb.append("Status");
        sb.append("{value=").append(value);
        sb.append(", text='").append(text).append('\'')
        sb.append('}');
        return sb.toString();
    }
}

したがって、コードではStatus.ACTIVEそしてそれはあなたのEnumのインスタンスを表し、それはvaluetextをあなたが望む方法で保持します

7
GameDroids

識別子の途中にスペースを入れることはできません。

このリンクをチェックしてください Javaのenumに数値を割り当てることは可能ですか? Javaのenumに値を割り当てるために。

0
Someone