Javaオブジェクト指向(7)

数え上げます

列挙(列挙型シミュレーション)の導入

class Student {
    private int restDay;

    public int getRestDay() {
        return restDay;
    }

    public void setRestDay(int restDay) {
        this.restDay = restDay;
    }
}

public class Test {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.setRestDay(1);
        int res = stu.getRestDay();
        if (res == 6 || res == 7) {
            System.out.println("放假");
        } else {
            System.out.println("上课");
        }
    }
}

上記のコード、いくつかの問題があります。

(1)データは、入力8安全ではありません

stu.setRestDay(8);  // 输出:上课(没有星期八)

不合理なの(2)ビジネスロジック:週の最初の日には、中国は月曜日、外国周初日の最初の日で、外国人と同じではありません。

改善後:

class WeekDay {
    public static final int MONDAY = 1;
    public static final int TUESDAY = 2;
    public static final int WEDNESDAY = 3;
    public static final int THURSDAY = 4;
    public static final int FRIDAY = 5;
    public static final int SATURDAY = 6;
    public static final int SUNDAY = 7;
}

class Student {
    private int restDay;

    public int getRestDay() {
        return restDay;
    }

    public void setRestDay(int restDay) {
        this.restDay = restDay;
    }
}

public class Test {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.setRestDay(WeekDay.MONDAY);
        int res = stu.getRestDay();
        if (res == 6 || res == 7) {
            System.out.println("放假");
        } else {
            System.out.println("上课");
        }
    }
}

改善されたコードは、問題があります:

(1)データは、入力8安全ではありません

stu.setRestDay(8);  // 输出:上课(没有星期八)

再び改良:

class WeekDay {
    private WeekDay() {}
    public static final WeekDay MONDAY = new WeekDay();
    public static final WeekDay TUESDAY = new WeekDay();
    public static final WeekDay WEDNESDAY = new WeekDay();
    public static final WeekDay THURSDAY = new WeekDay();
    public static final WeekDay FRIDAY = new WeekDay();
    public static final WeekDay SATURDAY = new WeekDay();
    public static final WeekDay SUNDAY = new WeekDay();
}

class Student {
    private WeekDay restDay;

    public WeekDay getRestDay() {
        return restDay;
    }

    public void setRestDay(WeekDay restDay) {
        this.restDay = restDay;
    }
}

public class Test {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.setRestDay(WeekDay.MONDAY);
        WeekDay res = stu.getRestDay();
        if (res == WeekDay.SATURDAY || res == WeekDay.SUNDAY) {
            System.out.println("放假");
        } else {
            System.out.println("上课");
        }
    }
}

上記のコードは、問題を解決しますが、コードは、あまりにも冗長良い見ていません。

列挙は何ですか

列挙:物事の固定された状態を示します。

たとえば、次のシーズン(春、夏、秋、冬)、曜日(月曜日から日曜日)、性別(男性と女性)

列挙の定義

フォーマット:

[修饰符] enum 枚举的名称  {
    常量1,常量2,常量3……
}

例えば:

enum Sex {
    MAN, FEMALE
}

自然の列挙

Javaの列挙型は、シンタックスシュガー特別なクラスは、オブジェクトのコレクションは、より定数です。

我々は列挙を定義すると、その本質は、列挙型を継承するクラスのクラスです。

enum Sex {
    MAN, FEMALE
}

後にコンパイル:

final class Sex extends Enum
{

    public static final Sex MAN;
    public static final Sex FEMALE;
    private static final Sex ENUM$VALUES[];

    private Sex(String s, int i)
    {
        super(s, i);
    }

    public static Sex[] values()
    {
        Sex asex[];
        int i;
        Sex asex1[];
        System.arraycopy(asex = ENUM$VALUES, 0, asex1 = new Sex[i = asex.length], 0, i);
        return asex1;
    }

    public static Sex valueOf(String s)
    {
        return (Sex)Enum.valueOf(Test/Sex, s);
    }

    static 
    {
        MAN = new Sex("MAN", 0);
        FEMALE = new Sex("FEMALE", 1);
        ENUM$VALUES = (new Sex[] {
            MAN, FEMALE
        });
    }
}

おすすめ

転載: www.cnblogs.com/xzh0717/p/11232811.html