使用 JDK 5+ 泛型時,對原始類型(如 Map、List)進行未檢查操作(如 new HashMap()、map.put(key, value)),編譯器發出 unchecked 警告,提示潛在類型安全風險。
| 方案 | 操作方式 | 優點 | 缺點 | 推薦場景 |
|---|---|---|---|---|
| 1. 指定 -source 1.4 | Ant/Javac 參數 -source 1.4 | 快速屏蔽警告,無需改代碼 | 失去泛型語法支持,治標不治本 | 緊急兼容舊代碼庫 |
| 2. @SuppressWarnings("unchecked") | 方法/類註解 | 精準壓制特定位置警告 | 早期 javac 不支持(需 JDK 5.1+),掩蓋真實問題 | 明確確認安全的局部代碼 |
| 3. 完整泛型化重構 | Map | 消除警告,獲得編譯期類型安全 | 工作量大,需逐處修改 | 新代碼、核心模塊、長期維護項目 |
| 4. Ant 編譯參數 -Xlint:unchecked | build.xml <compilerarg value="-Xlint:unchecked"/> | 顯式輸出警告詳情,不阻斷構建 | 僅顯示警告,不解決根因 | CI 流水線審計、代碼審查 |
| 5. 使用原始類型但聲明泛型 | Map | 編譯通過,保留運行時靈活性 | 喪失泛型約束,偽裝類型安全 | 對接無泛型第三方庫、快速原型 |
-source 1.5 實為啟用泛型)✅ 編譯通過,報表正常Map,編譯通過且類型安全<compilerarg value="-Xlint:unchecked"/> 後編譯通過,僅輸出警告不報錯-Xlint:unchecked -Werror 將警告升級為錯誤,防止新增未檢查代碼@SuppressWarnings 隔離,不污染核心代碼