web-dev-qa-db-fra.com

Comment créer une valeur clé comme enum en java

J'ai besoin de créer des chaînes contenant des espaces et leurs valeurs dans int comme:

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

parce que je l’utilise avec hibernate et que je vais aussi le convertir en JSON pour les formulaires en alpaga js.

comme:

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

Je suis coincé à faire énumérer comment faire un tel type d'énum.

3
Saqib Ahmed

Vous ne pouvez pas mettre d'espace entre les chaînes. Au lieu de, vous pouvez utiliser le trait de soulignement comme suit:

In_Active

Vous pouvez utiliser cette façon:

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;
    }
}
18
Chandana Kumara

Vous pouvez contenir plusieurs valeurs dans une enum et même avoir des accesseurs pour les gérer. Voici un exemple que j'ai utilisé une fois (j'essaie de l'adapter à votre problème):

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 InstagramImageSize getText(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();
    }
}

Donc dans votre code, vous pouvez simplement utiliser Status.ACTIVE et cela représentera une instance de votre Enum, qui contient value et text comme vous le souhaitez

3
GameDroids

Vous ne pouvez pas insérer d'espace au milieu d'un identifiant. 

Check out this link Est-il possible d'attribuer une valeur numérique à une énumération en Java? pour attribuer la valeur à une énumération en Java. 

0
Someone