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

简介: 为什么不推荐使用 isXXX 来命名呢?到底是用基本类型的数据好呢还是用包装类好呢?

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

为什么不推荐使用 isXXX 来命名布尔类型的数据

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

阿里巴巴为什么不建议 boolean 类型变量用 isXXX1.png

为了测试出结果,我创建了四个实体类,分别定义了不同的属性,boolean testBoolean、boolean isTestBoolean、

Boolean testBoolean、Boolean isTestBoolean,结果如下:

阿里巴巴为什么不建议 boolean 类型变量用 isXXX2.png

阿里巴巴为什么不建议 boolean 类型变量用 isXXX3.png

从图上可以看出:

  • 基本数据类型自动生成的 getter 和 setter 方法的名称都是 isXXX() 和 setXXX()
  • 包装类自动生成的 getter 和 setter 方法的名称都是 getXXX() 和 setXXX()

其实 JavaBeans 规范中对这些均有相应的规定,基本数据类型的属性,其 getter 和 setter 方法是 getXXX() 和 setXXX,但是对于基本数据中布尔类型的数据,又有一套规定,其 getter 和 setter 方法是 isXXX() 和 setXXX,感兴趣的同学可以自己搜搜这个规范看看,这里我就不贴出来了。

平时使用的时候可能不会出什么问题,但是在 Json 序列化对象的时候就会出问题,比如 Gson、FastJson、JackJson。当这三个工具对对象进行序列化时,Gson 只会通过反射遍历获取到属性,然后将其值进行序列化,但是 FastJson 和 JackJson 是反射遍历获取对象的 getter 方法,然后会通过相应的 JavaBeans 规则,认为 getXXX 或者 isXXX 后面就是属性,然后进行序列化。

所以使用 isXXX 来定义属性名字的,通过 JackJson 和 FastJson 序列化出来的结果,总是比通过 Gson 序列化出来的结果多一个属性。我们就以 TestBoolean1 和 TestBoolean2 进行序列化来对比结果:

阿里巴巴为什么不建议 boolean 类型变量用 isXXX4.png

阿里巴巴为什么不建议 boolean 类型变量用 isXXX5.png

从图可以看出:若不使用的 isXXX 来定义属性名,三个工具序列化的结果一样的,这没什么问题。

下面是命名为 isXXX 的属性,序列化以后的结果如下:

阿里巴巴为什么不建议 boolean 类型变量用 isXXX6.png

阿里巴巴为什么不建议 boolean 类型变量用 isXXX7.png

可以看出,序列化后的结果如上,会发现 Gson 序列化后的结果跟 JackJson 以及 FastJson 的结果不一致。说到底还是序列化的方式不同,那么问题就来了,当设置 isTestBoolean 为 true,当使用 FastJson 进行序列化以后再通过 Gson 进行反序列化,结果就会出问题:

阿里巴巴为什么不建议 boolean 类型变量用 isXXX8.png

阿里巴巴为什么不建议 boolean 类型变量用 isXXX9.png

你会发现本来给 isTestBoolean 赋值的是 true,但是反序列化以后的结果是 false,跟我们想要的结果不一致。

究其原因,FastJson 通过反射遍历找到 isTestBoolean 方法,基于 JavaBeans 规范,认为这个类的属性是 testBoolean,然后获取其值,将其序列化为 {"testBoolean",true},然后 Gson 解析字符串,通过 testBoolean 找该类的属性,结果发现该类就一个属性 isTestBoolean,没有 testBoolean 属性。

因此 Gson 反序列化后 TestBoolean2 中的 isTestBoolean 会使用其默认值 false,而不是我们想要的 true。因此,阿里巴巴的 Java 开发手册强制规定,布尔类型的数据,不要用 isXXX 来命名。

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

咱们举个例子,一个计算盈利的系统,其盈利比例有正有负,若使用了基本类型 double 定义了数据,当 RPC 调用时,若出现了问题,本来应该返回错误的,但是由于使用了基本类型,返回了 0.0,系统会认为没有任何问题,今年收支平衡,而不会发现其实是出现了错误。

若使用了包装数据类型 Double,当 RPC 调用失败时,会返回null,这样直接就能看到出现问题了,而不会因为默认值的问题影响判断。

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

阿里巴巴为什么不建议 boolean 类型变量用 isXXX10.png

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

来源:
https://blog.csdn.net/xiaoye319/article/details/85232719

相关文章
|
2月前
|
Arthas 监控 Java
阿里程序员常用的 15 款开发者工具!
阿里巴巴将自身在各类业务场景下的技术积淀,通过开源、云上实现或工具等形式对外开放,本文将精选了一些阿里巴巴的开发者工具,希望能帮助开发者们提高开发效率、更优雅的写代码。
470 1
|
2月前
|
人工智能 缓存 算法
最新版通义千问(Qwen3.8‑Max‑Preview)功能介绍
随着AI智能体从简单问答走向长周期自主任务执行,市场对大模型的综合能力提出更高要求,不仅需要强悍的文本推理,还需要原生多模态理解、百万级超长上下文、稳定的链式工具调用、大型工程项目完整交付能力。Qwen3.8‑Max‑Preview作为通义千问系列新一代旗舰预览基座,总参数规模达到2.4万亿,采用MoE混合专家架构,定位为**代码工程+专业办公**双核旗舰模型,完成从纯文本向原生多模态的跨越,在长链路Agent自治、全栈软件开发、大批量复杂文档分析、多模态专业办公场景实现能力跨越式提升。该预览版本率先开放于百炼平台,支持Token Plan订阅模式调用,适配OpenClaw、Hermes Ag
924 2
|
19天前
|
存储 NoSQL 安全
用 Java 接入大模型(五):多轮对话的上下文怎么管
本文深入剖析多轮对话的核心误区:大模型本身无记忆,所谓“遗忘”实为上下文管理失当。从messages结构化封装、token精准截断策略,到Redis会话存储与三步排错法,系统讲解如何可靠构建长程对话能力。
159 7
|
2月前
|
Java API Maven
Spring Boot 创建项目详细介绍
如何创建一个 Spring Boot 项目,以及自动生成的目录文件作用。
205 2
|
2月前
|
前端开发 Java 数据库连接
Spring Boot 详细简介!
Spring Boot 是什么?能干啥?
303 0
Spring Boot 详细简介!
|
2月前
|
缓存 前端开发 测试技术
通义千问Qwen3.7 Plus与Max实测对比:多模态能力、推理表现与性价比深度解析
在大模型应用落地的过程中,很多开发者会陷入选型困境,同样属于Qwen3.7系列的两款主力基座Qwen3.7‑Max与Qwen3.7‑Plus,都具备百万级超长上下文窗口,支持长周期Agent智能体运行,但二者在模态支持、推理侧重、计费成本、实际业务表现上存在明显分化。不少开发者只看到参数规格相近,直接盲目选用高价Max,造成业务调用成本成倍上涨;也有部分业务场景对纯文本硬核推理要求极高,选用Plus之后遇到复杂逻辑任务出现能力瓶颈。本文将从底层架构、多模态能力、基准实测数据、代码Agent表现、计费性价比、真实业务场景、API实操调用、选型避坑多个维度,完整拆解两款模型的差异,帮助个人开发者、
459 1
|
2月前
|
人工智能 测试技术 Shell
OpenCode开源AI编程助手实操:替代Claude Code对接百炼完整教程
在AI编程Agent快速普及的当下,很多开发者习惯使用闭源编程代理工具完成项目重构、bug修复、新功能开发,但闭源工具存在诸多现实痛点。一方面工具完全绑定自家模型,无法自由切换推理后端;另一方面账号风控策略严苛,容易出现账号受限、调用中断的情况,企业内部开发还会面临代码数据外送带来的数据安全风险。OpenCode作为一款开源AI编程代理框架,被很多开发者视作Claude Code的优质替代方案,它不绑定任何大模型厂商,支持对接云端大模型服务,也可以接入本地私有化部署模型,同时完整复刻终端Agent的文件读写、命令执行、项目分析等核心能力,搭配百炼平台的各类代码大模型,就可以搭建一套完全自主可控
390 1
|
17天前
|
存储 安全 算法
浏览器的安全随机与哈希:密码生成、UUID 与 SHA-256 实现
浏览器中三类“随机字符串”需求本质不同:密码需密码学安全随机源(如`crypto.getRandomValues`),UUID(v4/v7)用于唯一标识对象,SHA-256用于校验内容一致性。混用会引入安全风险——UUID非密钥,SHA-256不可存密码,`Math.random()`不适用于认证场景。(239字)
|
17天前
|
人工智能 JSON 自然语言处理
2027秋招项目别再只做聊天机器人:把一次“异常工具调用”做成可回放的测试系统
本项目聚焦客服Agent工具调用可靠性:第一周设计Trace采集与确定性断言(如“退款必先查订单”);第二周构建24条回归用例,量化越界率、延迟等指标。无需大模型平台,两周可演示,突出工程严谨性与AI落地边界意识。
|
17天前
|
存储 人工智能 监控
阿里云有免费Tokens吗?肯定的呀,免费领取超7000万Tokens,纯免费的
阿里云百炼新人可免费领取超7000万Tokens(每模型100万),仅限华北2(北京)地域,有效期90天。额度用完即停可防扣费,剩余额度在百炼控制台实时查询。
130 1

热门文章

最新文章