点击上方“Java之间”,选择“置顶或者星标”
你关注的就是我关心的!
作者:孤独的探索号
一、Annotation引用非空enum数组返回空数组
首次发现时的环境:JDK 1.8
首次发现所在项目:APIJSON
测试用例:
解决方案:
不抽象数组常量ALL,HIGHTS等,而是在每个用到的地方硬编码写死具体的值。
二、ArrayList可通过构造函数传入非指定泛型的List并在get时出错
首次发现时的环境:JDK 1.7
首次发现所在项目:APIJSON
测试用例:
解决方案:
1、改用 Open JDK8
2、升级 JDK
注:后面多次测试,已无法复现。
三、基本类型在三元表达式内可赋值为null,编译通过但运行出错
首次发现时的环境: JDK 1.7
测试用例:
首次发现所在项目:ZBLibrary
解决方案:
在给基础类型用3元表达式赋值时,null 先转为基础类型的默认值。
最后再提2个不是bug,但容易引发编程bug的问题:
1、局部变量和同名的全局变量能在一个方法内,编译通过,运行也正常。
如果两个变量中间隔了比较长的其它代码,很可能会导致开发人员将两者混淆,导致逻辑认知错误,从而写出或改出有问题的代码。
解决方案:
命名局部变量前先搜素,确保没有已声明的同名全局变量。
2、(非 JDK bug)Gson 通过 TypeToken 转换 List<T> 能写入不属于 T 类型的数据,get 出来赋值给 T 类型的变量/常量报错。
解决方案:
1、手动检查列表内数据都符合泛型 T
2、改用 fastjson 等其它能静态检查类型的库。
原文链接:
http://t.cn/EM8mF9y
最近热文阅读:
3、除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等
关注公众号,你想要的Java都在这里!