2016-03-25 8 views
-5

Zuerst entschuldige ich mich für mein schlechtes Englisch.Java: Wie kann ich die Seriennummer in Aufzählungstyp zählen?

Ich möchte Nachricht mit Seriennummer mit Aufzählungstyp erhalten. Beispiel ist wie folgt, Wie kann ich mein Ergebnis erhalten? Oder gibt es einen guten Weg ?? Was ich tun möchte, ist nur eine Zugabe Seriennummer auf „Start“ wie „0 beginnen“ und wenn a1 Instanz CALLEND Aufruf Wanto ich „0 Ende“

public enum State{ 
    START("start"), 
    END("end");  

    public String msg; 

    private State(String msg){ 
     this.msg = msg; 
    } 
} 

public class A{ 

    public void callStart(){ 
     System.out.println(State.START.msg); 
    } 

    public void callEnd(){ 
     System.out.println(State.END.msg); 
    } 

    public static void main(String[] args){ 
     A a1 = new A(); 
     A a2 = new A(); 

     a1.callStart(); // I wanna get start 0 here 
     a2.callStart(); // I wanna get start 1 here  
     a1.callEnd(); // I wanna get end 0 here 
     a2.callEnd(); // I wanna get end 1 here 
    } 
} 
+2

Entschuldigung, keine Ahnung, wovon Sie sprechen. Könnten Sie versuchen, es ein bisschen mehr zu erklären? –

+0

'msg' ist' privat'. Sie müssen entweder eine Getter-Methode erstellen oder sie "public" machen (auf die eine Art würde ich es auch "final" machen, also kann es nicht geändert werden). – Siguza

+1

Ich bemerke, dass 'msg' fast identisch ist mit dem Wert der enum. Warum verwenden Sie weder ['name()' noch überschreiben Sie die 'toString()'] (http://stackoverflow.com/questions/13291076/java-enum-why-use-tostring-instead-of-name)? – Laurel

Antwort

2

Die Tatsache, dass es sich um ein enum ist macht keinen Unterschied - Sie brauchen nur ein Feld, um die Nummer zu verfolgen.

Sie könnten einen Zähler hinzufügen, obwohl @PeterLawrey vorschlägt, Enum-Werte nicht änderbar zu machen, es sei denn, dies ist die einfachste Lösung.

public enum State{ 

    START("start"), 
    END("end"); 

    private int counter = 0; 

    private String msg; 

    State(String msg){ 
     this.msg = msg; 
    } 

    String getMessage() { 
     return msg + " " + counter++; 
    } 
} 

public static void main(String[] args) { 
    System.out.println(State.START.getMessage()); // start 0 
    System.out.println(State.START.getMessage()); // start 1 
} 
+0

Snap. ;) ...... –

+1

@PeterLawrey Sie gewinnen um 30 Sekunden. Ich habe in letzter Zeit so viele davon verloren. –

+0

Ich habe meine Antwort mit deiner kombiniert. ;) –

Verwandte Themen