关于POJO类使用包装类型的思考
关于基本数据类型与包装数据类型的使用标准如下: 1) 所有的POJO类属性必须使用包装数据类型。 2) RPC方法的返回值和参数必须使用包装数据类型。 3) 所有的局部变量推荐使用基本数据类型。
说明:POJO类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何NPE问题,或者入库检查,都由使用者来保证。
【正例】:数据库的查询结果可能是 null,因为自动拆箱,用基本数据类型接收有 NPE 风险。( NPE 下文有解释)
【反例】:某业务的交易报表上显示成交总额涨跌情况,即正负 x%,x 为基本数据类型,调用的 RPC 服务,调用不成功时,返回的是默认值,页面显示为 0%,这是不合理的,应该显示成中划线-。所以包装数据类型 的 null 值,能够表示额外的信息,如:远程调用失败,异常退出。
简单来说就是我们如果自定义了一个 Student 类,其中有一个属性是成绩 score .
如果用 Integer 而不用 int 定义,一次考试,学生可能没考,值是null,也可能考了,但考了0分,值是0.
public class Student {private Integer score;private int score;
}
请注意:这两个表达的状态明显不一样 。如果我们用包装类型的话,null的话证明没有考,0的话证明考了0分;但是如果我们用基本类型的话,这两种情况都是一个样的,没法区分的。
【推荐】防止 NPE,是程序员的基本修养,注意 NPE 产生的场景:
NPE,指为基本类型的数据返回null值,防止NPE是程序员的基本休养。所有NPE的场景:
- 返回类型为基本数据类型,return包装数据类型的对象时,自动拆箱有可能产生NPE。 public int f() { return Integer 对象; } 如果为null,自动解箱抛NPE。 复制代码
- 数据库的查询结果可能为 null。
- 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。
- 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。
- 对于 Session 中获取的数据,建议进行 NPE 检查,避免空指针。
- 级联调用 obj.getA().getB().getC() ;一连串调用,易产生 NPE。
正例:使用 JDK8 的 Optional 类来防止 NPE 问题。了解 JDK8 Optional 类
关于POJO类使用包装类型的思考相关推荐
- 为什么阿里巴巴开发手册中强制要求 POJO 类使用包装类型?NPE问题防范
背景:写这个的原因,也是我这两天凑巧看到的,虽然我一直有 alibaba Java 开发手册,也看过不少次,但是一直没有注意过这个问题
- POJO类中布尔类型属性的定义与命名
阿里Java开发手册中强制规定: 而不类型的变量名不要使用isXxx的格式.因为布尔类型属性的getter方法与其他类型的不一样,是isSuccess(),如果在变量名之前加上is的话,属性名与方法名 ...
- POJO 类中布尔类型为啥不让用 isXxx 命名
一.代码问题重现 想要使用json串在服务间传递信息时,我们会先定义一个POJO类,该类中包含是否删除属性isDeleted,代码如下 /** * @author wenxuan wang */ @D ...
- JS-9 JS常见内置类;包装类型;Number类方法与实例方法;Math方法;String类常见方法;数组方法(增删改查+遍历+排序);时间Date 构造函数+获取信息+设置信息+获取Unix时间戳
目录 1_包装类型 2_Number类补充 3_Math对象 4_String类的补充 4.1_基本使用 4.2_修改字符串 4.3_查找.替换字符串 开头与结尾 4.4_获取子字符串 4.5_其他方 ...
- 【Mybatis框架】输入映射-pojo包装类型
下面说说关于mapper.xml文件中的输入映射 我们看一下之前为User配置的mapper文件UserMapper.xml: [html] view plaincopy <?xml versi ...
- POJO类属性使用基本类型还是包装类型(编码规范)
1.使用包装类型 2.Java编码规范 Java编码规范
- pojo类中的布尔类型的变量为什么不能加is
[强制] POJO类中的布尔类型的变量,都不不要加is,否则部分框架解析会引起序列化错误. 反例: 定义为基本数据类型boolean isSuccess:的属性,他的方法也是isSuccess();R ...
- java中的POJO类属性建议使用包装数据类型
1.说明 POJO 类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何NPE(NullPointerException,空指针异常) 问题,或者入库检查,都由使用者来保证. 2.举例 ...
- 实体类中用基本类型好,还是用包装类型
实体类中用基本类型好,还是用包装类型好? 如果您也考虑这个问题欢迎指正我的观点,如果您正在考虑这个问题,欢迎评论一起讨论一下这个问题 刚才又想到了关于module或者实体类的建立的问题,用基本类型(i ...
最新文章
- 程序员开发进度太慢被告上法庭!公司索赔90万,拿出百度词条当证据
- 2.2.2 指数加权平均
- 解决spring-boot-maven-plugin not found爆红
- (第五篇)Linux操作系统基本结构介绍
- Linux就应该这么学第七课-文件的特殊权限
- mysql if 多个_MySQL使用IF语句CONCAT多个字段
- java使用xml存储数据_用存储过程和 JAVA 写报表数据源有什么弊端?
- Python 生成器 和 yield 关键字
- 80-20-075-原理-Flink内存管理
- 老李分享:接电话扩展之uiautomator 1
- 关于计算性能的若干重要事实
- LOJ 6070基因 回文树 分块
- 自学java到可以找工作要多久_自学编程需要多久才能找到工作?
- win10锁屏c语言,Win10秘笈:如何在锁屏打开任意应用程序?
- qq邮箱的发件服务器怎么设,如何利用QQ邮箱实现网站SMTP发信,详细邮箱的配置教程...
- Android中集成支付宝
- 【dqmp项目笔记】
- jmeter接口测试3-正则表达式提取器的使用
- iOS OC Sugars collection
- linux学习(一)虚拟机界面全屏