欢迎关注方志朋的博客,回复”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 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

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

  1. Js基本包装类型(含原理)

    前言 错误理解: 之前对Js基本包装类型的理解是,当我们创建了一个基本类型的变量时,Js会自动为我们将其包装(转换)成基本包装类型的实例,所以我们才能直接调用它的属性的方法. // 因为基本包装类型的 ...

  2. 【基本类型】——基本类型与包装类型

    一.基本类型 Java一种静态编程语言,所有变量和表达式是在编译时就确定的.同时,Java又是一种强类型语言,所有的变量和表达式都有具体的类型,并且每种类型是严格定义的.类型限制了变量可以hold什么 ...

  3. Go 学习笔记(27)— type 关键字(类型定义、类型别名、类型查询、定义接口、定义结构体)

    1. 类型别名定义 定义类型别名的写法为: type TypeAlias = Type 类型别名规定: TypeAlias 只是 Type 的别名,本质上 TypeAlias 与 Type 是同一个类 ...

  4. 包装类型与包装类别_包装的重要性

    包装类型与包装类别 我记得大约15年前开始学习Java的时候. 我读到了很多有关"包装"和"命名空间"的东西,但我完全不了解. 可悲的是:虽然包装的某些方面几乎 ...

  5. XML之文档类型定义和合法性(转)

    来至:liang--liang博客:http://www.cnblogs.com/liang--liang/archive/2008/01/15/1039277.html 好牛 XML被作为一种元标记 ...

  6. 包装类型缓存问题分析

    文章目录 写在前面 1. 前言 2. Integer缓存问题分析 2.1 源码分析 2.2 反汇编法 3.Long 的缓存问题分析 3.1 源码分析 3.2 反编译 4. 总结 5. 个人感悟 6. ...

  7. 基本类型和包装类型的区别

    1.基本类型有初始值,而包装类型的默认值是null 数据类型 默认值 byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char '/u0000' ...

  8. Java基本类型和包装类型总结

    1.Java的基本类型及其对应的包装器类 Java有8种基本类型:大致分为3类:字符,布尔,数值类型(在java中数值是不存在无符号的,这一点不像C/C++,他们的取值范围是固定的,不会随着机器硬件的 ...

  9. DTD(文档类型定义)概述

    DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块.DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. DTD 简介 文档类型定义(DTD)可定义合法的XML文档构建模块.它 ...

最新文章

  1. base64 python兼容js_无法在中读取Base64编码的图像节点.js它是从Python发送的
  2. 不要做浮躁的嵌入式系统工程师
  3. Unity Shader 屏幕后效果——高斯模糊
  4. python: line=f.readlines() 后如何消除line中的’\n’
  5. 前端学习(3000):vue+element今日头条管理--远程仓库的issue
  6. java语言程序设计基础篇14.6答案_《Java语言程序设计-基础篇》答案-第15章
  7. C++输出字符变量地址
  8. 利用shell和iptables实现自动拒绝恶意试探连接SSH服务
  9. Ubuntu Quickbuild 安装配置
  10. 用SQL Server(T-SQL)获取连接字符串
  11. 奥迪A8的L3级自动驾驶方案---奥迪A8的zFAS
  12. matlab如何电路分析方法,MATLAB在电路分析中的应用_李继林
  13. 微信小程序标签样式的优先级
  14. 史上最全最详细的PS3模拟器安装及设置教程
  15. 为什么mysql默认事务隔离级别为RR
  16. 侃一侃萨班斯法案之302条款
  17. WEBGIS开发 常用开发功能简介 数据处理 标绘 业务数据可视化 视频融合 Cesium EarthSDK
  18. 吴恩达提出了著名的二八定律
  19. phpsocket客户端以及服务器例子
  20. JAVA 枚举类型 根据代码得到中文

热门文章

  1. elementui 清空下拉框值_element中的select如何在下拉数据改变后清空之前的选择?...
  2. 6 Java Shell排序
  3. spring mvc + mybatis 框架搭建 ( idea + gradle)
  4. 1)头结点,头指针,
  5. Ubuntu安装Flash视频插件
  6. SQL Server的数据库连接的极限在哪儿?
  7. pthreads 的学习
  8. 两个asp.net发送邮件类
  9. C# 文件操作(上传 下载 删除 文件列表...)
  10. 迟语寒:组队学习的那些事