zoukankan      html  css  js  c++  java
  • 【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实现 蓝桥杯VIP 算法提高 阮小二买彩票
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    让程序后台隐藏运行
    只要你喜欢,并且可以养家糊口,就是好的
  • 原文地址:https://www.cnblogs.com/DWVictor/p/10507588.html
Copyright © 2011-2022 走看看