JDK 5.0 引入泛型、增強型 for 迴圈、自動裝箱/拆箱、靜態導入等特性,其中 Enum 枚舉類型 解決了舊版本需自行實作類型安全枚舉或引入第三方庫的痛點。本文由淺入深示範 Enum 用法。
private enum MyColor { Red, Yellow, Blue }
class EnumTest {
private enum MyColor {
Red(1), Yellow(2), Blue(3);
private final int num; // 序號屬性,final 保證不可變
MyColor(int num) { this.num = num; } // 建構子,自動對應各成員
public int getNum() { return num; }
}
public void showColor() {
// 增強型 for 迴圈遍歷所有枚舉值
for (MyColor c : MyColor.values()) {
System.out.println(c + " = " + c.getNum());
}
MyColor scolor = MyColor.Blue;
System.out.println(scolor);
if (scolor.getNum() == 3) System.out.println("true");
}
public static void main(String[] args) {
new EnumTest().showColor();
}
}
javac -source 1.5 EnumTest.java // 指定 1.5 語法版本
java EnumTest
Red = 1
Yellow = 2
Blue = 3
Blue
true
public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7),
PLUTO (1.27e+22, 1.137e6);
private final double mass; // kg
private final double radius; // m
Planet(double mass, double radius) { this.mass = mass; this.radius = radius; }
public double mass() { return mass; }
public double radius() { return radius; }
public static final double G = 6.67300E-11; // 萬有引力常數
public double surfaceGravity() {
return G * mass / (radius * radius);
}
public double surfaceWeight(double otherMass) {
return otherMass * surfaceGravity();
}
}
枚舉本質是 final 類別,可擁有欄位、建構子、方法、實作介面,極大提升類型安全與表達力。
若編譯器預設版本為 1.4,需加 -source 1.5 參數啟用新特性。
JDK 文件:$JDK_HOME/docs/guide/language/enums.html