【Java学习笔记之八】JavaBean中布尔类型使用注意事项
时间:2022-05-07
本文章向大家介绍【Java学习笔记之八】JavaBean中布尔类型使用注意事项,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
JavaBean是一个标准,遵循标准的Bean是一个带有属性和getters/setters方法的Java类。
JavaBean的定义很简单,但是还有有一些地方需要注意,例如Bean中含有boolean类型的属性。我们知道对于一个属性来说,如果其命名为test,那么其getter和setter方法一般为getTest()和setTest。但是如果test为一个布尔类型,那么其getter和setter方法为isTest()和setTest()。这是一个区别
1 public class BeanTest {
2 private boolean test;
3
4 public boolean isTest() {
5 return test;
6 }
7
8 public void setTest(boolean test) {
9 this.test = test;
10 }
11 }
如果我们将这个属性名换为isTest,那么其生成的getter和setter方法,居然和属性为test时的一样
1 public class BeanTest1 {
2 private boolean isTest;
3
4 public boolean isTest() {
5 return isTest;
6 }
7
8 public void setTest(boolean test) {
9 isTest = test;
10 }
11 }
这个区别在一般的情况下是没有影响的,但是如果涉及到和json串之间的转换,就得注意了。例如,如果我将上面的两个Bean的对象Json化,其结果居然是一样的
1 public static void main(String[] args) {
2 System.out.println(JSON.toJSONString(new Bean1())); //{"test":false}
3 System.out.println(JSON.toJSONString(new Bean2())); //{"test":false}
4 }
如果,我想要生成{“isTest”:false}这样的Json串,那么我们的Bean该怎么定义呢?这时候我们不该依赖于IDEA自动帮我们生成,我们必须手动编写:
1 public class Bean3{
2 private boolean isTest;
3
4 public boolean getIsTest(){
5 return isTest;
6 }
7 public void setIsTest(boolean isTest){
8 this.isTest = isTest;
9 }
10 }
虽然这样生成了我们想要的json串,但是这样没有遵循Java规范,感觉很别扭。。。。我们可以使用@JSONField来指定json化后对应的字段名
另外,如果属性是boolean的包装类型Boolean,那么JavaBean定义的getter和setter方法又为什么呢?
1 public class Bean4{
2 private Boolean test;
3
4 public Boolean getTest() {
5 return test;
6 }
7
8 public void setTest(Boolean test) {
9 this.test = test;
10 }
11 }
12
13 public class Bean5{
14 private Boolean isTest;
15
16 public Boolean getTest() {
17 return isTest;
18 }
19
20 public void setTest(Boolean test) {
21 isTest = test;
22 }
23 }
我们发现Boolean类型和boolean类型属性的get和set方法也是有差别的。
总的来说,为了避免麻烦,不管是定义Boolean类型的属性,还是定义boolean类型的属性,其字段名不要使用isXXX这种方式,然后按照Bean规范生成get和set方法就好了
- zookeeper监控告警
- 扩展ToolBarManager、ListView和Grid控件以实现气球式的ToolTip
- Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)
- Linux同步机制 - 多线程开发总结
- 谷歌发布升级版语音合成系统,直接从字符合成语音
- 无锁编程 - 大纲
- 无锁编程(一) - Double-checked Locking
- 无锁编程(二) - 原子操作
- 我所理解的Remoting(3):创建CAO Service Factory使接口和实现相互分离
- 无锁编程(三) - 忙等待
- Enterprise Library深入解析与灵活应用(9):个人觉得比较严重的关于CachingCallHandler的Bug
- 无锁编程(四) - CAS与ABA问题
- Linux Kernel CMPXCHG函数分析
- 无锁编程(五) - RCU(Read-Copy-Update)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Redis学习笔记 -- 1
- windows凭证转储(一)
- 你的接口真的安全吗?
- ubuntu搭建常见开发环境
- 基于 Kubernetes,Helm 及 Jenkins 实现弹性 CI/CD
- Go by Example 中文版: 读文件
- Apache Shiro权限框架理论介绍
- 【技术创作101训练营】Linux服务器的晴雨表—top命令
- 微服务之间的通信的方式
- Python从入门到熟练(7):函数
- Django调用百度地图api在地图上批量增加标记点
- Spring Cloud Config - 统一配置中心
- 从头分析一则traceId穿透问题(附解决方案)
- openldap的介绍与安装
- docker搭建环境如何配置端口