作者:孤獨的探索號
來源:https://my.oschina.net/tommylemon/blog/2967187
1.Annotation引用非空enum數組返回空數組
首次發現時的環境:JDK 1.8
首次發現所在項目:APIJSON
測試用例:
解決方案:
不抽象數組常量ALL,HIGHTS等,而是在每個用到的地方硬編碼寫死具體的值。
2.ArrayList可通過構造函數傳入非指定泛型的List並在get時出錯
首次發現時的環境:JDK 1.7
首次發現所在項目:APIJSON
測試用例:
解決方案:
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.局部變量和同名的全局變量能在一個方法內,編譯通過,運行也正常。
如果兩個變量中間隔了比較長的其它代碼,很可能會導致開發人員將兩者混淆,導致邏輯認知錯誤,從而寫出或改出有問題的代碼。
解決方案:
命名局部變量前先搜素,確保沒有已聲明的同名全局變量。
2. (非 JDK bug)Gson 通過 TypeToken 轉換 List
解決方案:
1.手動檢查列表內數據都符合泛型 T
2.改用 fastjson 等其它能靜態檢查類型的庫。
歡迎在留言區說說你的看法,一起探討交流。
擴展閱讀
閱讀更多 Java面經 的文章