| 類型 | 含義 | 例子 |
|---|---|---|
| 向後兼容性 | 新版本 JDK 運行舊字節碼 | JDK 17 運行 JDK 8 編譯的 .class |
| 遷移兼容性 | 泛型代碼與非泛型代碼**互相調用**無需修改 | 泛型 List<String> 傳給舊 API void process(List raw) |
List、Map。List<String> 和 List 成為**完全不同類型**,無法直接賦值/傳參,現有生態將崩潰。
3. **擦除**後,List<String> 編譯為 List,與舊代碼**二進制兼容**,只在編譯期做類型檢查,運行期統一為原始類型。
List gs = new ArrayList<>();
List raw = gs; // 編譯警告,但合法
raw.add(123); // 運行期不報錯,破壞類型安全
String s = gs.get(0); // ClassCastException:Integer cannot cast to String
Class.getTypeParameters()、Method.getGenericParameterTypes() 仍可反射獲取泛型信息(供框架/工具使用)。理解「遷移兼容性」是泛型擦除的核心動機,才能真正掌握 Java 泛型的設計哲學與邊界。