JDK 的3個bug啊!!!

作者:孤獨的探索號 
來源:https://my.oschina.net/tommylemon/blog/2967187


1.Annotation引用非空enum數組返回空數組

首次發現時的環境:JDK 1.8

首次發現所在項目:APIJSON

測試用例:

JDK 的3個bug啊!!!

JDK 的3個bug啊!!!

解決方案:

不抽象數組常量ALL,HIGHTS等,而是在每個用到的地方硬編碼寫死具體的值。

2.ArrayList可通過構造函數傳入非指定泛型的List並在get時出錯

首次發現時的環境:JDK 1.7

首次發現所在項目:APIJSON

測試用例:

JDK 的3個bug啊!!!

解決方案:

1.改用 Open JDK8

2.升級 JDK

注:後面多次測試,已無法復現。

3.基本類型在三元表達式內可賦值為null,編譯通過但運行出錯

首次發現時的環境: JDK 1.7

測試用例:

int i = true ? null : 0; //Exception in thread "main" java.lang.NullPointerException

首次發現所在項目:ZBLibrary

解決方案:

在給基礎類型用3元表達式賦值時,null 先轉為基礎類型的默認值。

最後再提2個不是bug,但容易引發編程bug的問題:

1.局部變量和同名的全局變量能在一個方法內,編譯通過,運行也正常。

JDK 的3個bug啊!!!

如果兩個變量中間隔了比較長的其它代碼,很可能會導致開發人員將兩者混淆,導致邏輯認知錯誤,從而寫出或改出有問題的代碼。

解決方案:

命名局部變量前先搜素,確保沒有已聲明的同名全局變量。

2. (非 JDK bug)Gson 通過 TypeToken 轉換 List 能寫入不屬於 T 類型的數據,get 出來賦值給 T 類型的變量/常量報錯。

JDK 的3個bug啊!!!

解決方案:

1.手動檢查列表內數據都符合泛型 T

2.改用 fastjson 等其它能靜態檢查類型的庫。

歡迎在留言區說說你的看法,一起探討交流。


擴展閱讀


分享到:


相關文章: