0

for-each ループと switch ステートメントを使用して列挙値を出力する単純な Enum テスターを反復処理すると、奇妙に思える動作が見られます。

コード:

public class EnumTest {

    private Number number;

    public EnumTest(Number number) {
        this.number = number;
    }
    public enum Number {
        ONE,
        TWO,
        THREE,
        FOUR,
        FIVE;
    }
    private void tellItLikeItIs() { 
        switch (number) {   
            case ONE:
                System.out.println("ONE");
            case TWO:
                System.out.println("TWO");
            case THREE:
                System.out.println("THREE");
            case FOUR:
                System.out.println("FOUR");
            case FIVE:
                System.out.println("FIVE"); 
        }
    }
    public static void main(String[] args) {    
        for (Number n : Number.values()) {
            EnumTest et = new EnumTest(n);
            et.tellItLikeItIs();
            System.out.println();
        }
    }
}

出力:

    ONE
    TWO
    THREE
    FOUR
    FIVE

    TWO
    THREE
    FOUR
    FIVE

    THREE
    FOUR
    FIVE

    FOUR
    FIVE

    FIVE

各呼び出しがそれ自体と後続のすべての値を返すのはなぜですか?

4

2 に答える 2

7

break;それはあなたがステートメントを忘れたからです...

private void tellItLikeItIs() { 
        switch (number) {   
            case ONE:
                System.out.println("ONE");
                break;
            case TWO:
                System.out.println("TWO");
                break;
            case THREE:
                System.out.println("THREE");
                break;
            case FOUR:
                System.out.println("FOUR");
                break;
            case FIVE:
                System.out.println("FIVE"); 
                break;
        }
    }

switch ステートメントの詳細については、こちらをご覧ください。

それらがないと、switch ブロック内のステートメントは失敗します。一致する case ラベルの後のすべてのステートメントは、後続の case ラベルの式に関係なく、break ステートメントが検出されるまで順番に実行されます。

于 2013-03-19T13:48:45.897 に答える
1

以下のように、 Enum.name() または Enum.toString() メソッドを使用しないのはなぜですか。

    private void tellItLikeItIs() {
     System.out.println(number.name());
    }

また

    private void tellItLikeItIs() {
    System.out.println(number);
    }
于 2013-03-19T13:55:02.927 に答える