泛型通過類型參數化實現代碼復用,同時編譯期檢查類型安全,避免運行時強轉異常。
// 單類型參數
class Box<T> { ... }
// 多類型參數
class Map<K, V> { ... }
// 類型參數邊界
class Processor<T extends Number & Comparable> { ... }
邊界用 & 連接多個接口/類,限定類型參數必須滿足所有條件。
class J_C1 { public void mb_methodA() { System.out.print("A"); } }
interface J_C2 { public void mb_methodB(); }
class J_C3 extends J_C1 implements J_C2 {
public void mb_methodB() { System.out.print("B"); }
}
class J_T<T extends J_C1 & J_C2> {
public void mb_method(T t) { t.mb_methodA(); t.mb_methodB(); }
}
public class J_Genericity {
public static void main(String[] args) {
new J_T<J_C3>().mb_method(new J_C3()); // 輸出 AB
}
}
J_C3 同時具備 J_C1 和 J_C2 能力,滿足 T extends J_C1 & J_C2 約束。
枚舉用於定義固定常量集合,本質是繼承 java.lang.Enum 的特殊類。
enum Season { SPRING, SUMMER, AUTUMN, WINTER }
Season s = Season.SPRING; Season[] arr = Season.values(); // 獲取所有常量數組
new 創建實例。Season.SPRING。== 比較。name() 與 toString() 返回常量名字符串。enum Color {
RED("紅色", 0xFF0000),
GREEN("綠色", 0x00FF00);
private String cnName;
private int rgb;
Color(String cnName, int rgb) { this.cnName = cnName; this.rgb = rgb; }
public String getCnName() { return cnName; }
}
泛型解決「類型參數化」與「類型安全」;枚舉解決「固定常量集合」的類型安全與語義清晰。兩者均為 Java 5 引入的核心特性,現代 Java 開發不可或缺。