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

Java 泛型完全指南:從入門到擦除機制、通配符上下界與實戰模式

     編輯:Java 綜合教學

泛型核心價值

  • 編譯期類型安全: 將 ClassCastException 前置到編譯期
  • 消除強轉: 取出元素無需手動轉型
  • 代碼復用: 一套邏輯服務多種類型

核心概念

  • <T>:類型參數,使用時傳入具體類型(如 <String>)
  • 泛型擦除: 運行期泛型信息被擦除,僅保留原始類型(兼容舊版 JVM)
  • 補償機制: 編譯器自動插入轉型指令,開發者無感知

通配符與邊界

記憶口訣:PECS —— Producer Extends, Consumer Super。

實戰代碼示例

基礎使用

List list = new ArrayList<>();
list.add("abc");
// list.add(123); // 編譯報錯
for (String s : list) { System.out.println(s); } // 無需強轉

Comparable 與 Comparator

public class Person implements Comparable {
    private String name; private int age;
    @Override public int compareTo(Person o) {
        int t = this.age - o.age;
        return t == 0 ? this.name.compareTo(o.name) : t;
    }
}

public class ComparatorByName implements Comparator {
    @Override public int compare(Person o1, Person o2) {
        int t = o1.getName().compareTo(o2.getName());
        return t == 0 ? o1.getAge() - o2.getAge() : t;
    }
}

// 使用
TreeSet ts = new TreeSet<>(new ComparatorByName());

類與方法級泛型

public class Tool {
    private QQ q;
    public QQ getObject() { return q; }
    public void setObject(QQ q) { this.q = q; }

    // 方法級泛型
    public  void show(W str) { System.out.println(str); }
    public void print(QQ qq) { System.out.println(qq); } // 僅能調用 Object 方法

    // 靜態方法必須自行聲明泛型
    public static  void method(Y obj) { System.out.println(obj); }
}

關鍵限制

  • 不能實例化類型參數:new T() ❌
  • 不能創建泛型數組:new T[10] ❌
  • 靜態上下文不能使用類泛型
  • 異常類不能是泛型
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
語法含義適用場景典型案例
<?>未知類型只讀操作List<?>
<? extends E>E 或 E 的子類(上界)生產者(取出)addAll(Collection<? extends E>)
<? super E>E 或 E 的父類(下界)消費者(存入)Comparator<? super E>