【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方法就好了
- 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 文档注释
- 【从零开始用Swift开发一个iOS应用(仿微博)】开篇-1. demo上手体验
- 数据结构与算法-二维数组中的查找
- 卷积神经网络之 - GoogLeNet / Inception-v1
- 卷积神经网络之 - Alexnet
- Linux系列之学会使用Top命令进行系统监控
- 一简单线程同步笔试题分享,欢迎纠错分享更多思路
- 卷积神经网络之-NiN 网络(Network In Network)
- 【注意力机制】空间注意力机制之Spatial Transformer Network
- 【小技巧】用Python给你的视频添加字幕
- 震惊!我三步就搞定了 Tomcat 源码环境搭建!
- 【小技巧】深度学习中的那些效率提升利器(附资源)
- 多个线程为了同个资源打起架来了,操作系统是如何让他们安分的?
- 学习链表,这些题你值得一刷!
- Gophish钓鱼测试
- 【位运算】只出现一次的数字 II,数电的知识终于用上了!