流光年华|JDK的3个bug啊,你get到了吗?
1.Annotation引用非空enum数组返回空数组首次发现时的环境:JDK 1.8
首次发现所在项目:APIJSON
测试用例:
public enum RequestRole {/**未登录 , 不明身份的用户*/UNKNOWN,/**已登录的用户*/LOGIN,/**联系人 , 必须已登录*/CONTACT,/**圈子成员(CONTACT + OWNER) , 必须已登录*/CIRCLE,/**拥有者 , 必须已登录*/OWNER,/**管理员 , 必须已登录*/ADMIN;//似乎不管怎么做 , 外部引用后都是空值 。 并且如果在注解内的位置不是最前的 , 还会导致被注解的类在其它类中import报错 。//虽然直接打印显示正常 , 但被@Methodaccess内RequestRole[] GET()等方法引用后获取的是空值public static final RequestRole[] ALL = {RequestRole.UNKNOWN};//values();//所有public static final RequestRole[] HIGHS;//高级static {HIGHS = new RequestRole[] {OWNER, ADMIN};}public static final String[] NAMES = {UNKNOWN.name(), LOGIN.name(), CONTACT.name(), CIRCLE.name(), OWNER.name(), ADMIN.name()};}@MethodAccess(GETS = RequestRole.ALL,HEADS = RequestRole.HIGHS)public class Verify {}public class DemoVerifier {// >//
解决方案:
不抽象数组常量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.局部变量和同名的全局变量能在一个方法内 , 编译通过 , 运行也正常 。
如果两个变量中间隔了比较长的其它代码 , 很可能会导致开发人员将两者混淆 , 导致逻辑认知错误 , 从而写出或改出有问题的代码 。
解决方案:
【流光年华|JDK的3个bug啊,你get到了吗?】命名局部变量前先搜素 , 确保没有已声明的同名全局变量 。
2. (非 JDK bug)Gson 通过 TypeToken 转换 List 能写入不属于 T 类型的数据 , get 出来赋值给 T 类型的变量/常量报错 。
推荐阅读
- 东风暗换年华|缅方曝光称一分钱没收到,泱泱大国竟然诈捐?美国承诺向缅甸捐款
- 金色年华录|都是男扮女装谈恋爱,《少女大人》比《女世子》如何?
- 找神途|新版本神途:《年华神途手游》史上超强单职业神途出炉!
- 流光年华|拆解报告:搜狗AI录音笔C1 Max
- 电竞吐槽怪|张大仙衣服越来越少?网友:难道大仙也想上了?,虎牙功夫嘉年华
- 咻咻做搞笑|最美的年华给了2个这男人,可她生活幸福,著名演员蒋雯丽
- 私生饭|张大仙免费当主持,粉丝:张坦克这身材完全没想到!,功夫嘉年华
- 流光年华|VUE 实现高性能的 PDF 在线预览
- 游戏|功夫嘉年华:邹市明UZI竟以这种方式对决,还有秘密武器?
- 金色年华录|谢娜简直就是个模仿天才,一个人模仿出一个团,最像的还是刘敏涛
