JDK 5-列挙

2279 ワード

一般クラスシミュレーションの列挙の使用
public class Weekday {
    private Weekday() {} //    
    
    public static final Weekday MONDAY = new Weekday();  //           
    public static final Weekday TUESDAY = new Weekday();

    public String toString() {
        if(this == MONDAY)
            return "Monday";
        else if(...) ...
    }
}

抽象クラスシミュレーションの列挙の使用
public abstract class Weekday {
    private Weekday() {}

    public final static Weekday MONDAY = new Weekday() {
        public Weekday nextDay() {
            return TUESDAY;
        }
    };

    public final static Weekday TUESDAY = new Weekday() {
        public Weekday nextDay() {
            return WEDNESDAY;
        }
    };

    ...

    public abstract Weekday nextDay();
}

抽象クラスシミュレーションを使用すると、toString()がif-else文を大量に書くことを免除でき、オブジェクトごとに判断する必要はなく、具体的な実装クラスが完了するだけでよい.
列挙クラス
public enum Weekday {
  SUN, MON, TUE, WED, THU, FRI, SAT
}

通常の列挙クラスの末尾にセミコロンを書く必要はありません
バンド構造パラメータ列挙
public enum Weekday {    
    SUN(5), MON(), TUE(7), WED(), THU(9), FRI, SAT;    //      ,      

    private Weekday() {}
    private Weekday(int number) {
        System.out.println(number);
    }
}

列挙の各変数はstatic finalです
抽象関数付き列挙
public enum Weekday {    // enum  abstract  
    SUN(5) {
        public Weekday nextDay() {
            return MON;
        }
    }, 
    MON() {
        public Weekday nextDay() {
            return TUE;
        }
    }, 
    TUE() {
        public Weekday nextDay() {
            return WED;
        }
    }, 
    WED() {
        public Weekday nextDay() {
            return THU;
        }
    }, 
    THU() {
        public Weekday nextDay() {
            return FRI;
        }
    }, 
    FRI() {
        public Weekday nextDay() {
            return SAT;
        }
    }, 
    SAT() {
        public Weekday nextDay() {
            return SUN;
        }
    };

    private Weekday() {}
    private Weekday(int number) {
        System.out.println(number);
    }

    public abstract Weekday nextDay();
}

クラス内のメソッドの列挙
toString() - String name() - String ordinal() - int valueOf(String name) - Weekday values() - Weekday[] ... ...