新来了个技术总监:谁再在 POJO 中使用基本数据类型,以后就不用来了!

news/2024/7/1 17:52:11

欢迎关注方志朋的博客,回复”666“获面试宝典

40c3f5998e63367acee0200e87af53e1.png


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

8a6012312193155608db265f0a270079.png

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

我们来看一段简单的代码

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的场景又怎么处理呢?

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

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

热门内容:
  • 我们公司使用了 6 年的Spring Boot 项目部署方案!打包 + Shell 脚本部署详解,稳的一批!

  • 比 Xshell 还好用的 SSH 客户端神器,MobaXterm 太爱了!

  • 5.4万Star全部归零,项目作者:十分后悔

  • Fastjson 2 来了,性能继续提升,还能再战十年

  • 比 Xshell 还好用的 SSH 客户端神器,MobaXterm 太爱了!

3dee6019b68d4790d2327174fb25e795.png

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

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


http://lihuaxi.xjx100.cn/news/255540.html

相关文章

day12-事务

day12总结[c1] 今日内容 l 事务 l 连接池 事务 事务概述 为了方便演示事务,我们需要创建一个account表: CREATE TABLE account( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(30), balance NUMERIC(10.2) ); INSERT INTO…

Silverlight 3发布新版3.0.50106.0

微软1月19日发布Silverlight 3新版本3.0.50106.0.该版本主要修复以下几个问题:问题一: 当使用图形硬件加速功能(GPU)的时候,如果GPU驱动报错,Silverlight 3应用将不再正确显示内容。该问题是因为Silverligh…

Python 批量处理 Excel 数据后,导入 SQL Server

作者 | 老表来源 | 简说Python1、前言2、开始动手动脑2.1 拆解明确需求2.2 安装第三方包2.3 读取excel数据2.4 特殊数据数据处理2.5 其他需求2.6 完整调用代码1、前言今天教大家一个需求:有很多Excel,需要批量处理,然后存入不同的数据表中。2…

连续举办四届,最热门的NLP赛事来了!

全球最热门的NLP赛事之一语言是人类信息传递最重要的媒介,让机器理解语言并进行交互是人工智能的重要挑战。为推动语言理解与交互技术发展,2022语言与智能技术竞赛于3月30日正式启动。竞赛发布与NLP相关全新四大任务,并首发中文领域首个搜索知…

敬告

各位兄弟姐妹: 由于博客园全面启用二级域名,我原来的blog地址不得已要做个小小的修改。 原来是 www.cnblogs.com/xin_yi 现在改成了 www.cnblogs.com/xinyi 或 xinyi.cnblogs.com 心仪

NDK开发 - C/C++ 访问 Java 变量和方法

上一篇有提到 JNI 访问引用数组,涉及了 C/C 访问 Java 实例的方法和变量。虽然在之前的开发中,并没有用到 C/C 范围 Java 层数据,但是这部分内容还是很有用的。传送门:NDK开发 - C/C 访问 Java 变量和方法 C/C 访问 Java 层的方法…

tomcat下面web应用发布路径配置 ( 即虚拟目录配置 )

https://blog.csdn.net/AnQ17/article/details/52122236转载于:https://www.cnblogs.com/gangpao/p/9223504.html

“双一流”高校,整体搬迁!

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达本文来源:空军军医大学官网、各高校官网、四川日报高校搬迁,是高等教育资源的大转移,会对中国高等教育空间布局产生深远的影响&#xff0…