关于 boolean 类型的坑

在工作中定义了以下属性,被 leader 提示了两个问题

    private boolean isOpen;

一是 bool 类型的属性不能使用 is 开头,二是在 POJO 中,不要使用基本数据类型

其实在阿里编程规范中就严格定义了对于这两个问题的解释
在这里插入图片描述
其实 javaBeans 规范中对这些均有相应的规定,基本数据类型的属性,其 getter 和 setter 方法是 getXXX 和 setXXX,但是对于基本数据中布尔类型的数据,又有一套规定,其 getter 和 setter 方法是 isXXX 和 setXXX。但是包装类型都是以 get 开头

这种方式在某些时候是可以正常运行的,但是在一些 rpc 框架里面,当反向解析读取到 isSuccess 方法的时候,rpc 框架会“以为”其对应的属性值是 success,而实际上其对应的属性值是 isSuccess,导致属性值获取不到,从而抛出异常

在这里插入图片描述
二是所有的属性应该定义为包装类,因为基本数据类型有默认值,在数据库中,bool 类型可能有三个值,null、true、false。但是如果在 java 中定义对应的 bool 类型,只有两个值

这也提示我们使用 Boolean 类型做判断的时候应该与 true 值做判断,因为该值是可以为 null 的,而为 null 就会抛出异常

        Boolean a = null;
        if (a) {
            System.out.println("hello world");
        }
        if (a == true) {
            System.out.println("hello world");
        }

向上面这么写就会抛出异常,直接用 a 是不行的,将 null 与 true 做判断也是不行的,这提示我们做判断的时候尽量使用 Objects,这样不会出现 null 在 if 中的低级错误

		
        if (Objects.equals(a, true)) {
            System.out.println(1);
        }

但是如果直接判断是否为 null 比较是不会出现问题的

        Boolean a = null;
        if (a == null) {
            System.out.println(1);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值