阿里巴巴为什么不建议 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

相关文章
|
23天前
|
人工智能 缓存 算法
最新版通义千问(Qwen3.8‑Max‑Preview)功能介绍
随着AI智能体从简单问答走向长周期自主任务执行,市场对大模型的综合能力提出更高要求,不仅需要强悍的文本推理,还需要原生多模态理解、百万级超长上下文、稳定的链式工具调用、大型工程项目完整交付能力。Qwen3.8‑Max‑Preview作为通义千问系列新一代旗舰预览基座,总参数规模达到2.4万亿,采用MoE混合专家架构,定位为**代码工程+专业办公**双核旗舰模型,完成从纯文本向原生多模态的跨越,在长链路Agent自治、全栈软件开发、大批量复杂文档分析、多模态专业办公场景实现能力跨越式提升。该预览版本率先开放于百炼平台,支持Token Plan订阅模式调用,适配OpenClaw、Hermes Ag
683 2
|
20天前
|
Java API Maven
Spring Boot 创建项目详细介绍
如何创建一个 Spring Boot 项目,以及自动生成的目录文件作用。
108 2
|
20天前
|
前端开发 Java 数据库连接
Spring Boot 详细简介!
Spring Boot 是什么?能干啥?
218 0
Spring Boot 详细简介!
|
2月前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
3973 143
|
20天前
|
人工智能 测试技术 Shell
OpenCode开源AI编程助手实操:替代Claude Code对接百炼完整教程
在AI编程Agent快速普及的当下,很多开发者习惯使用闭源编程代理工具完成项目重构、bug修复、新功能开发,但闭源工具存在诸多现实痛点。一方面工具完全绑定自家模型,无法自由切换推理后端;另一方面账号风控策略严苛,容易出现账号受限、调用中断的情况,企业内部开发还会面临代码数据外送带来的数据安全风险。OpenCode作为一款开源AI编程代理框架,被很多开发者视作Claude Code的优质替代方案,它不绑定任何大模型厂商,支持对接云端大模型服务,也可以接入本地私有化部署模型,同时完整复刻终端Agent的文件读写、命令执行、项目分析等核心能力,搭配百炼平台的各类代码大模型,就可以搭建一套完全自主可控
216 1
|
20天前
|
缓存 前端开发 测试技术
通义千问Qwen3.7 Plus与Max实测对比:多模态能力、推理表现与性价比深度解析
在大模型应用落地的过程中,很多开发者会陷入选型困境,同样属于Qwen3.7系列的两款主力基座Qwen3.7‑Max与Qwen3.7‑Plus,都具备百万级超长上下文窗口,支持长周期Agent智能体运行,但二者在模态支持、推理侧重、计费成本、实际业务表现上存在明显分化。不少开发者只看到参数规格相近,直接盲目选用高价Max,造成业务调用成本成倍上涨;也有部分业务场景对纯文本硬核推理要求极高,选用Plus之后遇到复杂逻辑任务出现能力瓶颈。本文将从底层架构、多模态能力、基准实测数据、代码Agent表现、计费性价比、真实业务场景、API实操调用、选型避坑多个维度,完整拆解两款模型的差异,帮助个人开发者、
223 1
|
2月前
|
人工智能 安全 程序员
OpenClaw本地部署TopClaw,小龙虾AI零基础一键安装指南
TopClaw是OpenClaw官方内核的中文汉化版,专为小白设计:一键安装、零代码、免配置,支持Win/Mac全平台。内置模型下载器、本地离线运行、数据不出设备,隐私安全有保障。三分钟即可部署满血AI助手,写稿、翻译、编程轻松搞定。
318 7
|
3月前
|
人工智能 自然语言处理 算法
2026年企业建设智能客服系统要多少钱?费用、选型、落地
2026年全球智能客服市场爆发,AI准确率达93%,但传统“按坐席付费”模式失效。本文拆解“基础软件+AI算力+集成实施”三层成本结构,结合瓴羊Quick Service等标杆案例与星巴克、申通实战数据,揭示数十万至百万级投入的ROI逻辑,助企业避开隐性成本陷阱,精准锚定投入产出比。(239字)
|
24天前
|
Ubuntu 测试技术 网络安全
【Docker项目实战】使用Docker部署todo任务管理器
【Docker项目实战】使用Docker部署todo任务管理器
129 2
【Docker项目实战】使用Docker部署todo任务管理器
|
20天前
|
缓存 人工智能 JSON
阿里云百炼通义千问Qwen3.7‑Max全面解析:核心能力、技术特性与订阅使用指南
随着AI智能体应用持续走向生产落地,普通对话模型已经很难胜任大型代码库重构、多步骤复杂业务流程、长时间自主任务执行等工作,行业对具备深度逻辑推理、超长上下文记忆、稳定工具调用能力的基座模型需求持续上涨。Qwen3.7‑Max作为通义千问系列面向Agent场景打造的旗舰纯文本基座,依托MoE混合专家架构,把设计重心放在长周期自治任务、硬核逻辑推理、大规模软件工程任务上,在各类编程Agent、复杂推理公开评测榜单当中取得亮眼成绩,通过百炼平台对外提供API调用服务,支持按量计费、Token Plan、Coding Plan多种订阅模式,是企业构建私有Agent系统、复杂代码自动化工作流的重要选择。
170 1

热门文章

最新文章