2016-11-11 2 views
0

ich mit enthalten einige Strings mit Leerzeichen und ihre Werte in int wie eine enun machen müssen:Wie Schlüsselwert wie Enum in Java machen

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

, weil ich es mit Hibernate bin mit und wird es auch konvertieren zu JSON für Alpaca js Formen.

mag:

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

ich stecken machen Enum bin, wie diese Art von ENUM zu machen.

+0

Es ist nicht doppelt, weil ich Hibernate annotated Bean verwenden, in dem es verwendet wird, also brauche ich Schlüssel und Wert mit Leerzeichen, Link, den Sie freigegeben Enumeration mit Wert als Zeichenfolge, aber sein Schlüssel ist nicht Ganzzahl es ist auch Zeichenfolge –

+0

Sind Sie sicher, dass enum die einzige Möglichkeit ist, dieses Problem zu lösen? –

+0

Das englische Wort 'inaktiv' wird ohne Leerzeichen geschrieben. Bist du dir sicher, dass du nicht mit der richtigen Schreibweise leben kannst? :-) –

Antwort

0

Sie können kein Leerzeichen in der Mitte eines Bezeichners eingeben.

Überprüfen Sie diesen Link Is it possible to assign numeric value to an enum in Java? zum Zuweisen des Werts zu einer Aufzählung in Java.

+0

danke, aber es ist Wert haben keine Leerzeichen –

+0

Sind Ihre Enum-Werte nicht alle Int-Typ? – Someone

+0

Werte sind alle int und Text ist Zeichenfolge –

5

Sie können keinen Platz zwischen Zeichenfolgen eingeben. Statt die können Sie Strich wie folgt verwenden:

In_Active 

Sie auf diese Weise verwenden können:

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; 
    } 
} 
+0

ja ich weiß, ich kann nicht, aber ich brauche es –

+0

Bitte überprüfen Sie die modifizierte Antwort. –

+0

Danke @Chandana Kumara brauche etwas mehr Hilfe Ich habe es implementiert, aber der Winterschlaf erhält seinen Namen und zeigt ihn an. –

2

Sie können in einem enum mehrere Werte halten und sogar Getter müssen mit ihnen zu umgehen. Hier ist ein Beispiel, das ich einmal verwendet (ich versuche, es zu Ihrem Problem anzupassen):

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

Also in Ihrem Code, den Sie einfach Status.ACTIVE verwenden kann, und es wird eine Instanz Ihrer Enum darstellen, die value und text hält die Wie Sie es wollen

+0

Sorry, ich bin ein wenig zu spät, sah nicht Chandana Kumaras Antwort – GameDroids

+0

Großartig, aber können Sie mir helfen, warum automatisch generierte Bean Hibernate hat seinen Namen als String nicht sein Text –

+0

Ich bin nicht sicher, welche Art von Auto-Generation Sie beziehen sich auf , aber es gibt einen Unterschied zwischen 'Status.ACTIVE.name()' und 'Status.ACTIVE.toString()' und mit dieser Implementierung sogar 'Status.ACTIVE.getText()' Es ist möglich, dass der automatisch generierte Code aufruft die '.name()' Methode. In diesem Fall sollten Sie das ändern und '' anrufen.getText() 'oder ändern Sie Ihre' toString() '(noch besser) – GameDroids