为什么阿里巴巴禁止开发人员使用isSuccess作为变量名

2019-01-30  本文已影响0人  得鹿梦为鱼

阿里巴巴手册解释

8.【强制】POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。
反例:定义为基本数据类型 Boolean isDeleted;的属性,它的方法也是 isDeleted()。
RPC框架在反向解析的时候,“以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异
常

很全面的解释

https://mp.weixin.qq.com/s/LTiN6800FbIPmG2UdWwqqg

为什么我要在这里记录

今天在写接口文档的时候,想把之前的接口文档,返回字段补充完整,所以去调了下之前的接口,但是却发现,返回的对象里,多了几个“莫名其妙”的字段。
如图1:


图1 列表返回数据

在这里可以看到,isUnique字段返回的数据是我想要的,但是却发现还有一个unique字段,且值为true。(之前做单元测试的时候,居然没注意到!!!)

返回数据统一使用com.alibaba.fastjson序列化为String。不清楚怎么统一处理返回数据的,可参考前面有篇叫:实现ResponseBodyAdvice ...

这个时候突然想起之前leader在群里提了一个问题:
为什么阿里巴巴禁止开发人员使用isSuccess作为变量名

同时还有一个链接(就文章开头的那个),当时很忙,只是简单的过了一遍,今天遇到了这个问题,才再次重温

isXXX 不要随便用

就如我图里截取的一样,isUnique是Integer类型的,不是boolean类型的,但是还是会产生boolean的效果。

猜测
链接里的文章有说,fastjson在把对象序列化成json字符串的时候,是通过反射遍历出该类中的所有getter方法,得到isUnique(Integer类型会生成isXXX?),然后根据JavaBeans规则,生成unique属性?

总结

如果不是非要使用isXXX作为属性名,那么就不要使用,减少隐藏bug。否则在生产环境出现了问题,后果很严重!

尽量遵守 阿里巴巴Java开发手册
如果没有的,可找我要pdf文件。

上一篇下一篇

猜你喜欢

热点阅读