美文网首页
为什么阿里巴巴禁止开发人员使用isSuccess作为变量名

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

作者: 得鹿梦为鱼 | 来源:发表于2019-01-30 22:20 被阅读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文件。

    相关文章

      网友评论

          本文标题:为什么阿里巴巴禁止开发人员使用isSuccess作为变量名

          本文链接:https://www.haomeiwen.com/subject/gcecsqtx.html