为什么阿里巴巴强制要求使用包装类型定义属性?
欢迎关注方志朋的博客,回复”666“获面试宝典
在阿里巴巴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*/@Overridepublic 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的返回值中使用包装类型的原因。
热门内容:
学废了!面试官常问的14个......
抖音的服务器究竟有多大?
我研究了一个月阿里的岗位JD,不曾想.....
腾讯 Code Review 规范出炉!
如果从 0 开发电商平台,要用到哪些组件和框架?大多数人都说不全!
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
为什么阿里巴巴强制要求使用包装类型定义属性?相关推荐
- Js基本包装类型(含原理)
前言 错误理解: 之前对Js基本包装类型的理解是,当我们创建了一个基本类型的变量时,Js会自动为我们将其包装(转换)成基本包装类型的实例,所以我们才能直接调用它的属性的方法. // 因为基本包装类型的 ...
- 【基本类型】——基本类型与包装类型
一.基本类型 Java一种静态编程语言,所有变量和表达式是在编译时就确定的.同时,Java又是一种强类型语言,所有的变量和表达式都有具体的类型,并且每种类型是严格定义的.类型限制了变量可以hold什么 ...
- Go 学习笔记(27)— type 关键字(类型定义、类型别名、类型查询、定义接口、定义结构体)
1. 类型别名定义 定义类型别名的写法为: type TypeAlias = Type 类型别名规定: TypeAlias 只是 Type 的别名,本质上 TypeAlias 与 Type 是同一个类 ...
- 包装类型与包装类别_包装的重要性
包装类型与包装类别 我记得大约15年前开始学习Java的时候. 我读到了很多有关"包装"和"命名空间"的东西,但我完全不了解. 可悲的是:虽然包装的某些方面几乎 ...
- XML之文档类型定义和合法性(转)
来至:liang--liang博客:http://www.cnblogs.com/liang--liang/archive/2008/01/15/1039277.html 好牛 XML被作为一种元标记 ...
- 包装类型缓存问题分析
文章目录 写在前面 1. 前言 2. Integer缓存问题分析 2.1 源码分析 2.2 反汇编法 3.Long 的缓存问题分析 3.1 源码分析 3.2 反编译 4. 总结 5. 个人感悟 6. ...
- 基本类型和包装类型的区别
1.基本类型有初始值,而包装类型的默认值是null 数据类型 默认值 byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char '/u0000' ...
- Java基本类型和包装类型总结
1.Java的基本类型及其对应的包装器类 Java有8种基本类型:大致分为3类:字符,布尔,数值类型(在java中数值是不存在无符号的,这一点不像C/C++,他们的取值范围是固定的,不会随着机器硬件的 ...
- DTD(文档类型定义)概述
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块.DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. DTD 简介 文档类型定义(DTD)可定义合法的XML文档构建模块.它 ...
最新文章
- base64 python兼容js_无法在中读取Base64编码的图像节点.js它是从Python发送的
- 不要做浮躁的嵌入式系统工程师
- Unity Shader 屏幕后效果——高斯模糊
- python: line=f.readlines() 后如何消除line中的’\n’
- 前端学习(3000):vue+element今日头条管理--远程仓库的issue
- java语言程序设计基础篇14.6答案_《Java语言程序设计-基础篇》答案-第15章
- C++输出字符变量地址
- 利用shell和iptables实现自动拒绝恶意试探连接SSH服务
- Ubuntu Quickbuild 安装配置
- 用SQL Server(T-SQL)获取连接字符串
- 奥迪A8的L3级自动驾驶方案---奥迪A8的zFAS
- matlab如何电路分析方法,MATLAB在电路分析中的应用_李继林
- 微信小程序标签样式的优先级
- 史上最全最详细的PS3模拟器安装及设置教程
- 为什么mysql默认事务隔离级别为RR
- 侃一侃萨班斯法案之302条款
- WEBGIS开发 常用开发功能简介 数据处理 标绘 业务数据可视化 视频融合 Cesium EarthSDK
- 吴恩达提出了著名的二八定律
- phpsocket客户端以及服务器例子
- JAVA 枚举类型 根据代码得到中文
热门文章
- elementui 清空下拉框值_element中的select如何在下拉数据改变后清空之前的选择?...
- 6 Java Shell排序
- spring mvc + mybatis 框架搭建 ( idea + gradle)
- 1)头结点,头指针,
- Ubuntu安装Flash视频插件
- SQL Server的数据库连接的极限在哪儿?
- pthreads 的学习
- 两个asp.net发送邮件类
- C# 文件操作(上传 下载 删除 文件列表...)
- 迟语寒:组队学习的那些事