java布尔类型定义_Java如何正确定义布尔类型变量的命名
布尔类型变量命名success VS isSuccess
success & isSuccess 皆可,命名都不存在歧义性,但是建议不加is
理由:
1.防止部分框架解析会引起序列化错误 反例:定义为基本数据类型boolean isSuccess; 的属性,它的方法也是isSuccess(),RPC框架在反向解析的时候,“以为”对应的属性名称是success,导致属性获取不到,抛异常
类型Boolean 属性success
类型Boolean 属性isSuccess
类型boolean 属性是isSuccess
类型boolean 属性是success
以上代码的setter/getter是使用Intellij IDEA自动生成的,仔细观察以上代码,发现以下规律:
基本类型自动生成的getter和setter方法,名称都是isXXX()和setXXX()形式的。
包装类型自动生成的getter和setter方法,名称都是getXXX()和setXXX()形式的。
setter/getter规范
序列化时出现状况:
情况一:
public class Person implements Serializable {
private static final long serialVersionUID = -7363494335098590947L;
private boolean isSuccess;
public boolean isSuccess() {
return isSuccess;
}
public void setSuccess(boolean success) {
isSuccess = success;
}
public String getName(){
return "4869";
}
}
//主类
public class PropertyNameTest01 {
public static void main(String[] args) throws Exception{
Person person = new Person();
person.setSuccess(true);
//使用fastjson序列化person成字符串并输出
System.out.println("Serializable Result With fastjson :" + JSON.toJSONString(person));
//使用Gson序列化person成字符串并输出
Gson gson =new Gson();
System.out.println("Serializable Result With Gson :" +gson.toJson(person));
//使用jackson序列化person成字符串并输出
ObjectMapper om = new ObjectMapper();
System.out.println("Serializable Result With jackson :" +om.writeValueAsString(person));
}
}
运行结果
结论
fastjson和jackson在把对象序列化成json字符串的时候,是通过反射遍历出该类中的所有getter方法,得到getName和isSuccess,然后根据JavaBeans规则,他会认为这是两个属性name和success的值。直接序列化成json:{"name":"4869","success":true}
Gson是通过反射遍历该类中的所有属性,并把其值序列化成json:{"isSuccess":true}
不同的序列化工具,在进行序列化的时候使用到的策略是不一样的,所以,对于同一个类的同一个对象的序列化结果可能是不同的。
情况二:
public class Person implements Serializable {
private static final long serialVersionUID = -7363494335098590947L;
private boolean isSuccess;
public boolean isSuccess() {
return isSuccess;
}
public void setSuccess(boolean success) {
isSuccess = success;
}
}
//主类
public class PropertyNameTest01 {
public static void main(String[] args) throws Exception{
Person person = new Person();
person.setSuccess(true);
//使用fastjson序列化person成字符串并输出
System.out.println("Serializable Result With fastjson :" + JSON.toJSONString(person));
//使用Gson序列化person成字符串并输出
Gson gson =new Gson();
System.out.println("Serializable Result With Gson :" +gson.toJson(person));
//使用jackson序列化person成字符串并输出
ObjectMapper om = new ObjectMapper();
System.out.println("Serializable Result With jackson :" +om.writeValueAsString(person));
}
}
运行结果
同一个对象 分别用fastjson & gson序列化出现情况
public class Person implements Serializable {
private static final long serialVersionUID = -7363494335098590947L;
private boolean isSuccess;
public boolean isSuccess() {
return isSuccess;
}
public void setSuccess(boolean success) {
isSuccess = success;
}
@Override
public String toString() {
return new StringJoiner(", ", Person.class.getSimpleName() + "[", "]")
.add("isSuccess=" + isSuccess)
.toString();
}
}
//主类
public static void main(String[] args) throws Exception{
Person person = new Person();
person.setSuccess(true);
Gson gson = new Gson();
System.out.println(gson.fromJson(JSON.toJSONString(person),Person.class));
}
}
运行结果
结果完全相反,原因是因为JSON框架通过扫描所有的getter后发现有一个isSuccess方法,然后根据JavaBeans的规范,解析出变量名为success,把person对象序列化城字符串后内容为{"success":true}。
根据{"success":true}这个json串,Gson框架在通过解析后,通过反射寻找Person类中的success属性,但是Person类中只有isSuccess属性,所以,最终反序列化后的Person类的对象中,isSuccess则会使用默认值false。
所以,在定义POJO中的布尔类型的变量时,不要使用isSuccess这种形式,而要直接使用success!
java布尔类型定义_Java如何正确定义布尔类型变量的命名相关推荐
- Java私有方法解释_java接口中 定义 private 私有方法
在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...
- java 基本类型内存_java基本数据类型、内存分析、装包拆包
2019-09-13 18:01:23 idea快捷键: file->settings->Keymap->搜索关键字 Increase Font Size 增大字体 c ...
- java 枚举类型初始化_java 枚举类型分析
最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enumColorSelect { RED_BAGE= 0, GREEN_BAGE, BL ...
- java 浮点类型声明_java 浮点数据类型
Java的浮点类型有两种:float和double.Java的浮点类型有固定的表数范围和字段长度,字段长度和表数范围和机器无关.Java的浮点数遵循IEEE754标准,采用二进制数据的科学计数法来表示 ...
- C++基础之布尔类型,什么是C++的布尔类型
在C语言中,关系运算和逻辑运算的结果有两种,真和假:0 表示假,非 0 表示真.例如: #include <stdio.h>int main(){int a, b, flag;scanf( ...
- 布尔类型的值包括( )和( )_布尔类型
2.4.3布尔类型 布尔类型主要用来表示真值或假值.在Python中,标识符True和False被解释为布尔值.另外,Python中的布尔值可以转化为数值,True 表示1, False 表示0. 说 ...
- js布尔类型+数字判断_C ++中的布尔数据类型
js布尔类型+数字判断 In this article, we'll take a look at the Bool datatype in C++. 在本文中,我们将介绍C ++中的Bool数据类型 ...
- 在python中布尔类型的值包括_Python中布尔类型
我们已经了解了Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算: 与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and ...
- Java中Person类型赋值_Java设计:定义一个Person类和它的子类Employee。Person类有姓名、地址、电话号码和电子邮箱,...
匿名用户 1级 2017-04-26 回答 Person类: public class Person { private String address; private String name; pr ...
最新文章
- asp.net MD5 加密
- 都是套路!要毁灭人类、喷马斯克、还获得公民身份的机器人Sophia,真相确是...
- 灵活运用ISA的链接转换功能:ISA2006系列之十三
- 【转载】使用javassist动态注入代码
- 2018年12月2526日
- http304状态码缓存设置问题
- 指针04 - 零基础入门学习C语言44
- java继承与覆盖_简单的继承,方法重载与方法覆盖
- linux 如何获得后缀_Bugku:杂项 linux
- How to fix the bug “Expected required, optional, or repeated.”?
- OJ RuntimeError常见原因
- 突然吐字不清_要注意说话吐字不清小心是脑中风前兆
- The Event System
- python切面异常处理_Spring项目中优雅的异常处理
- Scala 语言学习之泛型(7)
- Zabbix email 配置
- Linux/Android——input_handler之evdev (四) 【转】
- Hamcrest Tutorial
- maxdos网刻教程(傻瓜型)
- 音频(四) - 音频压缩(Speex使用Opus简介)
热门文章
- 某酷音乐网多线下载工具 v1.0
- 异星工厂机器人教程_快速上手指南 - 异星工厂中文维基 | Factorio - 灰机wiki
- 怒了,专科学历被歧视?专科这样做照样可以牛掰。
- [Github] GitKraken 简体中文翻译补丁
- C++出现 error: no match for ‘operator==‘ (operand types are ‘Person‘ and ‘const Person‘)
- 省力下载网盘rapidshare、hotfile、megaupload、filesonic、f...
- 国内外立法与执法趋势
- 给河马刷牙(龙应台)
- matlab关于bp神经网络,关于matlab的BP神经网络
- ug专属界面如何定制,ug软件如何定制角色