2016-03-25 11 views
-5

まず、私は悪い英語をお詫びします。Java:シリアル番号を列挙型でカウントするにはどうすればよいですか?

列挙型を使用してシリアル番号でメッセージを取得したいと考えています。 例は次のとおりですが、どうすれば期待通りの結果が得られますか? または良い方法がありますか? 私は何をしたい「0を開始」とA1インスタンスがcallEndを呼び出すときに、私はwanto

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

申し訳ありませんが、あなたが何について話しています。それをもう少し説明しようと思いますか? –

+0

'msg'は' private'です。あなたはゲッターメソッドを作成するか、あるいは 'public'にしなければなりません(どちらも、最終的に' final'にして、変更することはできません)。 – Siguza

+1

'msg'はenumの値とほとんど同じであることに気づいています。なぜ[name() 'か' toString() '](http://stackoverflow.com/questions/13291076/java-enum-why-use-tostring-instead-of-name)を無効にするのはなぜですか? – Laurel

答えて

2

それはenumだという事実は違いはありません「0を終了」を得るように「開始」するだけで追加のシリアル番号です - 番号を追跡するフィールドが必要です。

@PeterLawreyは、これが最も簡単な解決策でない限り、列挙型の値を可変にしないでください。

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 30秒で勝つ。私は最近、これらの多くを失ってしまった。 –

+0

私は私の答えをあなたのものと組み合わせました。 ;) –

関連する問題