替代 public static final int MON = 1; 等「整型枚舉模式」,提供:
Day.MON 不會污染全局public enum Day {
MON, TUE, WED, THU, FRI, SAT, SUN;
}
編譯後生成 final class Day extends Enum<Day>,每個常量是 public static final Day MON = new Day("MON", 0);。構造函數 protected Enum(String name, int ordinal) 自動賦值名稱與順序。
for (Day d : Day.values()) {
System.out.println(d.name() + " -> " + d.ordinal());
}
String cn = switch (day) {
case MON -> "星期一";
case TUE -> "星期二";
default -> day.name();
};
Day d = Day.valueOf("MON"); // 字符串轉枚舉,區分大小寫
int idx = d.ordinal(); // 0-based 索引
String name = d.name(); // 常量名
public enum Day {
MON("星期一", 1), TUE("星期二", 2), WED("星期三", 3),
THU("星期四", 4), FRI("星期五", 5), SAT("星期六", 6), SUN("星期日", 7);
private final String chineseName;
private final int index;
Day(String chineseName, int index) {
this.chineseName = chineseName;
this.index = index;
}
public String getChineseName() { return chineseName; }
public int getIndex() { return index; }
// 靜態查找方法
public static Day fromIndex(int index) {
for (Day d : values()) if (d.index == index) return d;
throw new IllegalArgumentException("Invalid index: " + index);
}
@Override
public String toString() { return index + "_" + chineseName; }
}
public interface WorkSchedule {
boolean isWorkDay();
}
public enum Day implements WorkSchedule {
MON(true), TUE(true), WED(true), THU(true), FRI(true), SAT(false), SUN(false);
private final boolean workDay;
Day(boolean workDay) { this.workDay = workDay; }
@Override public boolean isWorkDay() { return workDay; }
}
// 工作日集合
EnumSet workDays = EnumSet.range(Day.MON, Day.FRI);
// 週末
EnumSet weekend = EnumSet.complementOf(workDays);
// 遍歷
for (Day d : workDays) System.out.println(d);
EnumMap schedule = new EnumMap<>(Day.class);
schedule.put(Day.MON, "會議");
schedule.put(Day.FRI, "總結");
schedule.forEach((k, v) -> System.out.println(k + " -> " + v));
public enum Singleton { INSTANCE; } —— 線程安全、防反序列化破壞、防反射攻擊。readResolve。Java Enum 是「類」與「常量」的完美融合:**它是類,所以能攜帶行為;它是常量,所以天然單例、類型安全**。掌握 EnumSet/Map、接口實現、單例模式等進階用法,能讓你的代碼更簡潔、更健壯、更具表達力。下次看到一堆 public static final int 時,請毫不猶豫地重構為 Enum。