前言
对应阿里巴巴开发手册第一章的命名风格的第八条。
【强制】 POJO类中布尔类型的变量都不要加is前缀,否则部分框架解析会引起序列化错误。
反例:定义为基本数据类型Boolean isDeleted; 的属性,它的方法名称也是 isDeleted(),
RPC框架在反向解析的时候,“误以为”对应的属性名称是deleted,导致属性获取不到抛出异常。
我对这个反例感觉有点怪怪的,基本数据类型Boolean?而且Boolean生成的getter方法是getXxx(),boolean生成的getter方法是isXxx(),疑惑,不知道是不是手册写错了还是我错了。
我认为这条很重要很重要。前后端传递数据时,就有可能因为布尔类型变量的命名,导致前后端传送数据时传递失败。 因为这个布尔类型的数据解析不一致,在后端该命名是isXxx,而在前端发送表单是传送的数据是isXxx,但是响应时却是Xxx,说明传输到后端时会解析成Xxx(像spring会根据getter和setter来解析POJO类,而当我创建的是isXxx,那么自动生成的getter方法会是isXxx方法,然后解析时会去掉is,所以变成了Xxx),而后端原本是isXxx,导致找不到该属性,所以值也传递不了。
所以这是一个致命问题,但是可以避免啊。
详解
在Java中布尔类型有基本数据类型和包装类,所以有四种方式来定义一个布尔类型的变量:
boolean isLive;
boolean live;
Boolean isLive;
Boolean live;
首先来总结上面的区别:
四种中有两种是boolean,而另外两种是Boolean。可不要傻乎乎的说这两个类型是一样的,正确的是它们是有区别的。
四种中有两种变量名是以is开头,另外两种没有。
先根据手册,可得布尔类型的变量命名不使用以is开头的。为什么?
来看看下面代码:
// boolean isLive
class People {
private boolean isLive;
public boolean isLive() {
return isLive;
}
public void setLive(boolean live) {