多値をとれるフラグとして使う

public class EnumExam {
    enum Animal {
        DOG, CAT, RAT, RABBIT
    };
    
    public static void main(String[] args) {
        Animal a = Animal.DOG;

        switch(a){
            case DOG:
                System.out.println("いぬ");
                break;
            case CAT:
                System.out.println("ねこ");
                break;
            case RAT:
                System.out.println("ねずみ");
                break;
            case RABBIT:
                System.out.println("うさぎ");
                break;
            default:
                System.out.println("?");
                break;
        }
    }
}

実行結果:

いぬ

値として使う

public class EnumExam2 {
    enum Animal {
        DOG, CAT, RAT, RABBIT
    };
    
    public static void main(String[] args) {
        // enum が取り得る値を列挙
        for(Animal a : Animal.values()) {
            System.out.println(a.ordinal() + ":" + a.name());
        }
        System.out.println("\n");

        // 文字列から enum をインスタンス化
        Animal c = Animal.valueOf("CAT");
        System.out.println("CAT IS " + c.name());

        Animal h = Animal.valueOf("HORSE");
        System.out.println("HORSE IS " + h.name());
    }
}

実行結果:

0:DOG
1:CAT
2:RAT
3:RABBIT


CAT IS CAT
Exception in thread "main" java.lang.IllegalArgumentException:
No enum const class com.snail.javaexam.EnumExam$Animal.HORSE
        at java.lang.Enum.valueOf(Enum.java:196)
        at com.snail.javaexam.EnumExam$Animal.valueOf(EnumExam.java:13)
        at com.snail.javaexam.EnumExam.main(EnumExam.java:28)

クラスとして使う

public class EnumExam3 {
    enum Animal {
        DOG("ぽち"){
            @Override
            String sayHello(){
                return "こんにちわん";
            }            
        },
        CAT("みけ"){
            @Override
            String sayHello(){
                return "こんにちにゃお";
            }
        },
        RAT("ちゅーた"){
            @Override
            String sayHello(){
                return "こんにちちゅう";
            }
        },
        RABBIT("うさこ"){
            @Override
            String sayHello(){
                return "もぐもぐ";
            }
        };

        private String pName;
        Animal(String name){
            pName = name;
        }

        @Override
        public String toString(){
            return pName;
        }

        abstract String sayHello();
    };
    
    public static void main(String[] args) {
        // enum が取り得る値を列挙
        for(Animal a : Animal.values()) {
            System.out.println(a.toString() + "\t「" + a.sayHello() + "」");
        }
    }
}

実行結果:

ぽち        「こんにちわん」
みけ        「こんにちにゃお」
ちゅーた    「こんにちちゅう」
うさこ      「もぐもぐ」

Swingのコンボボックスの選択肢なんかに使えそう。選択肢と、選択されたときの処理を列挙型(enum)で一緒に定義できる。


Java#JavaSE


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2011-02-08 (火) 00:57:43 (2125d)
ISBN10
ISBN13
9784061426061