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

Java 泛型基礎入門:從類型參數化到鑽石語法完全指南

     編輯:Java 綜合教學

Java 泛型基礎入門:從類型參數化到鑽石語法完全指南

泛型讓「類型」成為參數,賦予 API 極致的複用性與類型安全。本文從聲明語法、實例化、原始類型、泛型方法、有界類型五大基石,構建完整知識體系。

一、泛型聲明與命名慣例

class Box<T> { T value; }           // 單一型別參數
interface Map<K, V> { ... }         // 多型別參數,逗號分隔

標準命名:Element、Key、Value、Type、S/U/V (第 2/3/4 型別)

二、調用與實例化:參數化類型

Box<String> box = new Box<>();     // Java 7+ 鑽石語法 <>
Box<List<String>> box2 = new Box<>(); // 型別參數可為參數化類型

注意:鑽石語法僅省略構造器型別參數,宣告端不可省略。

三、原始類型與向下兼容

Box rawBox = new Box();             // 原始類型:無型別參數
Box<String> stringBox = new Box<>();
rawBox = stringBox;                 // 允許:參數化 → 原始 (無警告)
stringBox = rawBox;                 // 警告:unchecked conversion
  • 原始類型繞過編譯期類型檢查,風險轉移至運行期
  • 盡量避免使用;必須混用時加 @SuppressWarnings("unchecked")

四、泛型方法

型別參數置於回傳型別前,作用域限於方法內:

public static <K, V> boolean compare(Pair<K,V> p1, Pair<K,V> p2) {
    return p1.getKey().equals(p2.getKey()) && p1.getValue().equals(p2.getValue());
}
// 調用時編譯器自動推斷
boolean same = Util.compare(new Pair<>(1, "apple"), new Pair<>(2, "pear"));

五、有界類型參數

<T extends Number> void inspect(T t) { ... }           // 單一上界
<T extends Comparable<T> & Serializable> ...         // 多重界限用 &
  • extends 兼具「繼承類」與「實現介面」語義
  • 上界限制了可傳入的實際型別範圍

六、泛型與繼承:不變性原則

List<Integer> 不是 List<Number> 的子類型!

List<Number> list = new ArrayList<Integer>(); // 編譯錯誤
List<? extends Number> list = new ArrayList<Integer>(); // 正確:使用通配符

但 ArrayList<String> 實現 List<String>,繼承 Collection<String>,型別參數不變時繼承關係保留。

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