We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
9.【强制】POJO 类中的任何布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误。 说明:本文 MySQL 规约中的建表约定第 1 条,表达是与否的变量采用 is_xxx 的命名方式,所以需要在 设置从 is_xxx 到 xxx 的映射关系。 反例:定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(),框架在反向解析时,“误以为”对 应的属性名称是 deleted,导致属性获取不到,进而抛出异常。
反例中的例子描述是错误的。 原因:Boolean是包装类型,而包装类型属于引用类型。因此 基本数据类型 Boolean 的描述是错误的。 解释:那么,这句话就有两种情况了,到底是 基本数据类型 boolean isDeleted,还是 引用数据类型 Boolean isDeleted 呢? 这里我做了个测试,定义一个以 is 前缀开头的字段,使用开发工具生成 get、set 方法
基本数据类型 Boolean
基本数据类型 boolean isDeleted
引用数据类型 Boolean isDeleted
is
get
set
class Item { private boolean isDeleted; public boolean isDeleted() { return isDeleted; } public void setDeleted(boolean deleted) { isDeleted = deleted; } }
class Item { private Boolean isDeleted; public Boolean getDeleted() { return isDeleted; } public void setDeleted(Boolean deleted) { isDeleted = deleted; } }
class Item { private boolean deleted; public boolean isDeleted() { return deleted; } public void setDeleted(boolean deleted) { this.deleted = deleted; } }
结论: 对于基本类型的 boolean 而言,isDeleted 生成出来的 get 方法名还是 isDeleted,即 get 方法名和字段名相同 对于引用类型的 Boolean 而言,isDeleted 生成出来的 get 方法名是 getDeleted
基本类型
引用类型
反例:定义为基本数据类型 boolean isDeleted 的字段,它的 getter 方法也是 isDeleted(),部分框架在反向解析时,“误以为”对 应的字段名称是 deleted,导致找不到此字段,进而抛出异常或得到意料之外的结果。
修改点如下: 基本数据类型 Boolean -> 基本数据类型 boolean 修改原因:至于为什么可以参考上面,也是最需要修改的地方) 属性 -> 字段 修改原因:属性包括类成员字段 + getter方法 + setter方法,这里应该是定义字段更合适 它的方法 -> 它的 getter 方法 修改原因:字段的方法至少包括 getter 方法、setter 方法,这里最好具体说明是 getter 方法才会有此问题,否则会有歧义 框架 -> 部分框架 修改原因:并不是所有的框架都是使用方法名来获取属性值的,有的框架是通过字段名(如 gson),所以不会有问题,具体测试可以参考本人之前写的一篇文章带你从头到尾解释为什么阿里巴巴规范中强制布尔类型不要加is?三种java的json解析框架jackson、gson、fasterjson的用法和解析 属性名称 -> 字段名称 修改原因:同第 2 点 导致属性获取不到 -> 导致找不到此字段 修改原因:如果框架是通过 getter 方法获取属性的值,那肯定可以获取到的。但是有的框架是通过 getter 方法中的名字来反向解析获取字段的值,这个时候才会找不到字段。 进而抛出异常 -> 进而抛出异常或得到意料之外的结果 修改原因:不一定抛出异常的,取决于框架。
修改点如下:
The text was updated successfully, but these errors were encountered:
pr #879
Sorry, something went wrong.
已经修改,感谢
No branches or pull requests
规约原文
9.【强制】POJO 类中的任何布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误。
说明:本文 MySQL 规约中的建表约定第 1 条,表达是与否的变量采用 is_xxx 的命名方式,所以需要在
设置从 is_xxx 到 xxx 的映射关系。
反例:定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(),框架在反向解析时,“误以为”对
应的属性名称是 deleted,导致属性获取不到,进而抛出异常。
问题描述
反例中的例子描述是错误的。
原因:Boolean是包装类型,而包装类型属于引用类型。因此
基本数据类型 Boolean
的描述是错误的。解释:那么,这句话就有两种情况了,到底是
基本数据类型 boolean isDeleted
,还是引用数据类型 Boolean isDeleted
呢?这里我做了个测试,定义一个以
is
前缀开头的字段,使用开发工具生成get
、set
方法情况一:基本数据类型 boolean
情况二:引用数据类型 Boolean
情况三:基本数据类型 boolean
修改建议
反例:定义为基本数据类型 boolean isDeleted 的字段,它的 getter 方法也是 isDeleted(),部分框架在反向解析时,“误以为”对
应的字段名称是 deleted,导致找不到此字段,进而抛出异常或得到意料之外的结果。
The text was updated successfully, but these errors were encountered: