说说JDK 的3个BUG

点击上方Java之间”,选择“置顶或者星标”

你关注的就是我关心的!

640?wx_fmt=jpeg

作者:孤独的探索号

一、Annotation引用非空enum数组返回空数组

首次发现时的环境:JDK 1.8

首次发现所在项目:APIJSON

测试用例:

640?wx_fmt=png

解决方案:

不抽象数组常量ALL,HIGHTS等,而是在每个用到的地方硬编码写死具体的值。

、ArrayList可通过构造函数传入非指定泛型的List并在get时出错

首次发现时的环境:JDK 1.7

首次发现所在项目:APIJSON

测试用例:

640?wx_fmt=png

解决方案:

1、改用 Open JDK8

2、升级 JDK

注:后面多次测试,已无法复现。

三、基本类型在三元表达式内可赋值为null,编译通过但运行出错

首次发现时的环境: JDK 1.7

测试用例:

640?wx_fmt=png

首次发现所在项目:ZBLibrary

解决方案:

在给基础类型用3元表达式赋值时,null 先转为基础类型的默认值。

最后再提2个不是bug,但容易引发编程bug的问题:

1、局部变量和同名的全局变量能在一个方法内,编译通过,运行也正常。

640?wx_fmt=png

如果两个变量中间隔了比较长的其它代码,很可能会导致开发人员将两者混淆,导致逻辑认知错误,从而写出或改出有问题的代码。

解决方案:

命名局部变量前先搜素,确保没有已声明的同名全局变量。

2、(非 JDK bug)Gson 通过 TypeToken 转换 List<T> 能写入不属于 T 类型的数据,get 出来赋值给 T 类型的变量/常量报错。

640?wx_fmt=png

解决方案:

1、手动检查列表内数据都符合泛型 T

2、改用 fastjson 等其它能静态检查类型的库。


原文链接:

http://t.cn/EM8mF9y

640?wx_fmt=png

最近热文阅读:

1、Google 为什么把几十亿行代码放在一个库

2、消息中间件消费到的消息处理失败怎么办?

3、除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等

4、最伤人的面试集锦:交出你的自尊,换取一份工作!

5、把我坑惨的一个update语句

6、Spring Boot 使用 AOP 防止重复提交

7、深度揭秘,中国程序员们的生活现状!

8、分库分表的几种常见玩法及如何解决跨库查询等问题

640?wx_fmt=jpeg

关注公众号,你想要的Java都在这里

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值