Java SE 5 引入,**參數化類型**:將數據類型作為參數傳遞,應用於類、接口、方法,分別稱為泛型類、泛型接口、泛型方法。
ClassCastExceptionList<String> ≠ List<Object>)<K, V>)<T extends Comparable>Class<?> clazz = Class.forName("java.lang.String")public class Gen<T> {
private T ob;
public Gen(T ob) { this.ob = ob; }
public T getOb() { return ob; }
public void setOb(T ob) { this.ob = ob; }
public void showType() {
System.out.println("T的實際類型: " + ob.getClass().getName());
}
}
Gen<Integer> intOb = new Gen<>(88);
intOb.showType(); // java.lang.Integer
int i = intOb.getOb(); // 無需強轉
Gen<String> strOb = new Gen<>("Hello Gen!");
strOb.showType(); // java.lang.String
String s = strOb.getOb(); // 無需強轉
public class Gen2 {
private Object ob;
public Gen2(Object ob) { this.ob = ob; }
public Object getOb() { return ob; }
public void setOb(Object ob) { this.ob = ob; }
public void showType() { ... }
}
Gen2 intOb = new Gen2(new Integer(88));
intOb.showType();
int i = (Integer) intOb.getOb(); // 必須強轉
Gen2 strOb = new Gen2("Hello Gen!");
String s = (String) strOb.getOb(); // 必須強轉
T的實際類型: java.lang.Integer
value= 88
------------------------------
T的實際類型: java.lang.String
value= Hello Gen!
泛型本質是 **編譯器語法糖**(類型擦除),運行時泛型信息被擦除為原始類型。理解這兩個示例的異同,即掌握了泛型 70% 核心應用:類型參數化、編譯期檢查、自動強轉、避免運行時驚喜。