为什么阿里巴巴强制要求使用包装类型定义属性?

人工智能2025-11-04 06:58:538315

在阿里巴巴Java开发手册中,阿里对于POJO中如何选择变量的巴巴类型也有着一些规定:

这里强制要求使用包装类型,原因是强制求使什么呢?

我们来看一段简单的代码

 /**  * @author Hollis  */ public class BooleanMainTest {     public static void main(String[] args) {         Model model1 = new Model();         System.out.println("default model : " + model1);     } } class Model {     /**      * 定一个Boolean类型的success成员变量      */     private Boolean success;     /**      * 定一个boolean类型的failure成员变量      */     private boolean failure;     /**      * 覆盖toString方法,使用Java 8 的用包义属StringJoiner      */     @Override     public String toString() {         return new StringJoiner(", ", Model.class.getSimpleName() + "[", "]")             .add("success=" + success)             .add("failure=" + failure)             .toString();     } } 

以上代码输出结果为:

default model : Model[success=null, failure=false] 

可以看到,当我们没有设置Model对象的装类字段的值的时候,Boolean类型的型定性变量会设置默认值为null,而boolean类型的阿里变量会设置默认值为false。

即对象的巴巴默认值是null,boolean基本数据类型的强制求使默认值是false。

也就是用包义属说,包装类型的装类默认值都是null,而基本数据类型的型定性默认值是一个固定值,免费信息发布网如boolean是阿里false,byte、巴巴short、强制求使int、long是0,float是0.0f等;

我们再举一个扣费的例子,我们做一个扣费系统,扣费时需要从外部的定价系统中读取一个费率的值,我们预期该接口的返回值中会包含一个浮点型的费率字段。当我们取到这个值得时候就使用公式:金额*费率=费用 进行计算,计算结果进行划扣。

如果由于计费系统异常,他可能会返回个默认值,如果这个字段是Double类型的话,该默认值为null,如果该字段是double类型的话,该默认值为0.0。

如果扣费系统对于该费率返回值没做特殊处理的话,服务器托管拿到null值进行计算会直接报错,阻断程序。拿到0.0可能就直接进行计算,得出接口为0后进行扣费了。这种异常情况就无法被感知。

有人说,那我可以对0.0做特殊判断,如果是0一样可以阻断报错啊。但是,这时候就会产生一个问题,如果允许费率是0的场景又怎么处理呢?

所以,使用基本数据类型只会让方案越来越复杂,坑越来越多。

这种使用包装类型定义变量的方式,通过异常来阻断程序,进而可以被识别到这种线上问题。如果使用基本数据类型的话,系统可能不会报错,进而认为无异常。

以上,就是建议在POJO和RPC的返回值中使用包装类型的原因。

网站模板
本文地址:http://www.bzuk.cn/news/168b32299509.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

如何利用Switch加速电脑?(教你简单操作,提高电脑速度!)

带你了解域名周期,让你的域名不在死亡

精品域名为什么会过期?

MongoDB Atlas现支持多云数据库集群

移动4G+全网通手机,畅享无限可能(打破网络壁垒,快速稳定通信的首选)

一文快速入门分库分表中间件Sharding-JDBC (必修课)

域名可以出租吗?出租域名时要留意什么?

又一个精品单词域名超46万元结拍

友情链接

滇ICP备2023006006号-33