为什么阿里巴巴不建议 boolean 类型变量用 isXXX?

纯洁的微笑 2021-02-07 09:58:11 ⋅ 55 阅读

背景

平时工作中大家经常使用到boolean以及Boolean类型的数据,前者是基本数据类型,后者是包装类,为什么不推荐使用isXXX来命名呢?到底是用基本类型的数据好呢还是用包装类好呢?

例子:

1.其他非boolean类型
private String isHot;
public String getIsHot() {
        return isHot;
        }
        2.boolean类型
private boolean isHot;
public boolean isHot() {
        return isHot;
        }
        3.包装类型
private Boolean isHot;
public Boolean getHot() {
        return isHot;
        }
        4.不以is开头
private boolean hot;
public boolean isHot() {
        return hot;
        }
        5.包装类型
private Boolean hot;
public Boolean getHot() {
        return hot;
        }

阿里巴巴规范

其实阿里巴巴发布的java开发手册中就写明了,强制规定,布尔类型的数据,无论是boolean还是Boolean都不准使用isXXX来命名

图片

  • 对于非boolean类型的参数,getter和setter方法命名的规范是以get和set开头
  • 对于boolean类型的参数,setter方法是以set开头,但是getter方法命名的规范是以is开头
  • 包装类自动生成的getter和setter方法的名称都是getXXX()和setXXX()
  1. 其实javaBeans规范中对这些均有相应的规定,基本数据类型的属性,其getter和setter方法是getXXX()和setXXX,但是对于基本数据中布尔类型的数据,又有一套规定,其getter和setter方法是isXXX()和setXXX。但是包装类型都是以get开头
  2. 这种方式在某些时候是可以正常运行的,但是在一些rpc框架里面,当反向解析读取到isSuccess()方法的时候,rpc框架会“以为”其对应的属性值是success,而实际上其对应的属性值是isSuccess,导致属性值获取不到,从而抛出异常。

1、boolean类型的属性值不建议设置为is开头,否则会引起rpc框架的序列化异常。

2、如果强行将IDE自动生成的isSuccess()方法修改成getSuccess(),也能获取到Success属性值,若两者并存,则之后通过getSuccess()方法获取Success属性值。

工作中使用基本类型的数据好还是包装类好?

咱们举个例子,一个计算盈利的系统,其盈利比例有正有负,若使用了基本类型bouble定义了数据,当RPC调用时,若出现了问题,本来应该返回错误的,但是由于使用了基本类型,返回了0.0,系统会认为没有任何问题,今年收支平衡,而不会发现其实是出现了错误。若使用了包装数据类型Double,当RPC调用失败时,会返回null,这样直接就能看到出现问题了,而不会因为默认值的问题影响判断。

其实阿里java开发手册中对于这个也有强制规定:

 

因此,这里建议大家POJO中使用包装数据类型,局部变量使用基本数据类型。

 


全部评论: 0

    我有话说:

    刚刚入职新公司,为什么老大Lombok?

    刚刚入职一家新的公司,在写业务的时候引入了Lombok 结果在老大在代码审查的时候在微信群里截图说让在项目里面Lombok,说是会带来各种问题,大家都还在吗?

    项目中为什么Docker?

      项目为什么 docker,需要了解 docker 的优势,结合项目的实际情况来决定是否需要使用 docker,千万不能“为了使用而使用”或者“跟风使用 docker”。 使用

    Tengine 2.3.3 即将发布,阿里开源的轻量级 Web 服务器

    Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易...

    项目中为什么docker?

    算,每台服务器都要做同样的事情,然后他们说可以...

    阿里中间件-Nacos 发布 v0.8.0 Pre-GA版本,安全稳定上生产

    服务注册和服务配置开源项目 Nacos 本周发布了 v0.8.0 Pre-GA 版本,作为开源项目生命周期中的里程碑版本之一

    Redis面试整理:Redis几种数据类型法和应用场景重新梳理了一下

    1、字符串 1.1 介绍 string 字符串类型是Redis中最为常和基础的存储类型,是一个由字节组成的序列,他在Redis中是二进制安全的,也可以认为string字符串数据类型能够接收任何格式

    Sentinel 1.8.1 发布,高可用流量防护组件

    Sentinel 是阿里开源的,面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从流量控制、流量整形、依赖隔离、熔断降级、系统自适应保护等多个维度来帮助开发者保障微服务的

    Spring Cloud Alibaba 发布毕业后的首个版本

    方剑,花名洛夜,GitHub ID @fangjian0423,开源爱好者,阿里高级开发工程师,阿里云产品 EDAS 开发,Spring Cloud Alibaba 开源项目负责人。

    Python 基础系列--字符串类型【3】

    字符串是编程必然面临的类型,常指数之高,不得不先了解下

    单元测试增强工具TestableMock 让Mock返璞归真

    简介 阿里研发效能团队开源的Java单元测试增强工具,换种思路写Mock,让单元测试更简单。 无需初始化,挑测试框架,甭管要换的方法是被测类的私有方法、静态方法还是其他任何类的成员方法,也甭管

    架构实战篇(十):Spring Boot 集成 Dubbo

    Dubbo是阿里SOA服务化治理方案的核心框架,一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案。

    高可用流控降级组件 Sentinel Go 1.0 GA 版本正式发布

    Sentinel 是阿里开源的,面向云原生、分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统自适应保护等多个维度来帮助开发者保障微服务的稳定性

    为什么要使用 Node.js?这几点你必须知道!

    经过这几年的发展,前端普遍进入了技术深水区,只会Web页面开发已经难以满足企业的需求,Node逐渐成为了刚性技能。 但Node在业务上的使用还没有那么普及,有的时候想老板还同意,本文将从4个角度

    面试官:HashMap为什么是线程安全的?

    一直以来只是知道HashMap是线程安全的,但是到底HashMap为什么线程安全?

    精品推荐:Nacos 发布 v0.6.0 版本,支持 Dubbo 和 Docker 部署

    阿里微服务开源项目Nacos发布 v0.6.0 版本,该版本开始支持 Dubbo的服务发现和配置管理,并针对 Docker 部署提供了官方的 Docker 镜像,以及优化了Nacos 控制台的

    Fluid 0.3 正式发布:实现云原生场景通用化数据加速

    简介 为了解决大数据、AI 等数据密集型应用在云原生计算存储分离场景下,存在的数据访问延时高、联合分析难、多维管理杂等痛点问题,南京大学 PASALab、阿里、Alluxio 在 2020 年