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

Java 泛型核心知識點:從基礎到通配符與自定義泛型類

     編輯:Java 相關知識

一、無泛型的痛點

集合存入對象時上轉為 Object,取出需強轉,易出錯且碼冗餘。
List list = new ArrayList(); list.add("a"); String s = (String)list.get(0);

二、泛型基本語法

List list = new ArrayList(); // Java 7+ 可寫 new ArrayList<>();
  • 編譯期類型檢查,取出無需強轉。
  • 泛型參數可為類、接口,不能為基本類型(需用包裝類)。
  • 泛型類型本身也是類型,可嵌套:List>。
  • 不可為 Throwable 子類(運行時拋異常,編譯期無法確定)。

三、通配符 ? 解決類型不匹配

問題:List 不是 List 的子類,無法傳遞給參數為 List 的方法。

// 使用無界通配符
private static void printList(List list) {
    for (Object o : list) System.out.print(o);
}
// 可傳入 List、List 等任意泛型 List

注意:聲明/創建時不能用 ?,即 List list = new ArrayList(); 編譯報錯。

四、有界通配符限定類型範圍

// 只接受 Number 及其子類
private static double avg(List list) {
    double sum = 0;
    for (Number n : list) sum += n.doubleValue();
    return sum / list.size();
}
// 調用:avg(intList)、avg(doubleList) 均合法;avg(stringList) 編譯報錯
  • :上界,讀取安全,不可寫入(除 null)。
  • :下界,寫入安全,讀取只能作為 Object。

五、自定義泛型類

public class MyGeneric {
    private E value;
    public MyGeneric(E value) { this.value = value; }
    public E get() { return value; }
    public void set(E value) { this.value = value; }
}

泛型為編碼提供嚴格類型檢查,消除強轉,是類型安全的利器。

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