核心規則速查表
- 靜態方法泛型化:必須顯式聲明類型參數,如 `static void method(T t)`。
- 非泛型類實例方法泛型化:同樣需顯式聲明類型參數。
- 泛型類實例方法:可直接使用類定義的類型參數。
- 泛型非協變:`List` 不是 `List` 子類,不可賦值。
- 不可實例化泛型數組:`new List[3]` 非法;僅 `new List>[3]` 合法(未綁定通配符)。
- 構造延遲:編譯期無法通過類型參數 `new T()`,因運行時類型擦除。
變通:`T[] arr = (T[]) new Object[3]`(不推薦)或傳入 `Class` 使用 `Array.newInstance(type, len)`(推薦,參考 `ArrayList.toArray()`)。
- 通配符實例化陷阱:`Set> set2 = new HashSet>(set)` 非法,須寫 `new HashSet
- 類型擦除導致的重載衝突:擦除後簽名相同的方法不可共存。
- 泛型異常限制:泛型類不能直接/間接繼承 `Throwable`,catch 子句不能使用類型參數。
最佳實踐原則
優先使用集合工廠方法 (`List.of`, `Set.of`)、流式 API 避免手工構造泛型數組;API 設計時傳遞 `Class` 保留運行時類型信息;善用 ` extends T>`/` super T>` 靈活控制協變/逆變。