字段命名避免使用is开头

in with 0 comment

前言

前段时间开发碰到一个问题,因为Mysql数据库没有布尔类型,POJO 类中布尔类型的变量有布尔变量(可用0和1来代替),存的时候没有问题,可取的时候却出现问题。无论0还是1,在将POJO类序列化成JSON数据后,前端判断始终出错,都解析为一样的值。 找了半天,没找到问题,最后想想是不是is开头的问题,结果去掉is,正常解析了(这里是isS开头),后来查了下资料知道大概原因。

导致问题出现的原因

而对于boolean类型的参数,我们可能会这样命名

private boolean isSuccess;
    
    public boolean isSuccess() {
    	return isSuccess;
    }
     
    public void setSuccess(boolean success) {
    	isSuccess = success;
    }

这种方式在某些时候是可以正常运行的,但是在一些rpc框架里面,当反向解析读取到isSuccess()方法的时候,rpc框架会“以为”其对应的属性值是success,而实际上其对应的属性值是isSuccess,导致属性值获取不到,从而抛出异常。 而阿里规范手册也有提到 POJO 类中布尔类型变量都不要加 is 前缀,否则部分框架解析会引起序列化错误。

反例:定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(),RPC 框架在反向解
析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。

规范这东西还是很重要的

{
      "canPigsFly": null,     // null
      "areWeThereYet": false, // boolean true or false
      "answerToLife": 42,     // number
      "name": "Bart",         // string
      "moreData": {},         // object
      "things": []            // array
    }
X O