数え上げます
列挙(列挙型シミュレーション)の導入
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
});
}
}