首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 泛型核心原理與等價實現對比

     編輯:Java 相關知識

泛型本質

Java SE 5 引入,**參數化類型**:將數據類型作為參數傳遞,應用於類、接口、方法,分別稱為泛型類、泛型接口、泛型方法。

核心優勢

  • 編譯期類型安全:避免運行時 ClassCastException
  • 消除顯式強轉:自動隱式轉換,代碼更乾淨
  • 提高復用性:一套代碼服務多種類型

關鍵規則與限制

  1. 類型參數只能是引用類型(含自定義類),不能是基本類型
  2. 同一泛型不同參數化版本互不兼容(如 List<String> ≠ List<Object>)
  3. 支持多類型參數(如 <K, V>)
  4. 支持有界類型:<T extends Comparable>
  5. 支持通配符: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();  // 無需強轉

示例二:不使用泛型(Object 替代)

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% 核心應用:類型參數化、編譯期檢查、自動強轉、避免運行時驚喜。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved