关于基本数据类型与包装数据类型的使用标准如下: 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的场景:

  1. 返回类型为基本数据类型,return包装数据类型的对象时,自动拆箱有可能产生NPE。 public int f() { return Integer 对象; } 如果为null,自动解箱抛NPE。 复制代码
  2. 数据库的查询结果可能为 null。
  3. 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。
  4. 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。
  5. 对于 Session 中获取的数据,建议进行 NPE 检查,避免空指针。
  6. 级联调用 obj.getA().getB().getC() ;一连串调用,易产生 NPE。

正例:使用 JDK8 的 Optional 类来防止 NPE 问题。了解 JDK8 Optional 类

关于POJO类使用包装类型的思考相关推荐

  1. 为什么阿里巴巴开发手册中强制要求 POJO 类使用包装类型?NPE问题防范

    背景:写这个的原因,也是我这两天凑巧看到的,虽然我一直有 alibaba Java 开发手册,也看过不少次,但是一直没有注意过这个问题

  2. POJO类中布尔类型属性的定义与命名

    阿里Java开发手册中强制规定: 而不类型的变量名不要使用isXxx的格式.因为布尔类型属性的getter方法与其他类型的不一样,是isSuccess(),如果在变量名之前加上is的话,属性名与方法名 ...

  3. POJO 类中布尔类型为啥不让用 isXxx 命名

    一.代码问题重现 想要使用json串在服务间传递信息时,我们会先定义一个POJO类,该类中包含是否删除属性isDeleted,代码如下 /** * @author wenxuan wang */ @D ...

  4. 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_其他方 ...

  5. 【Mybatis框架】输入映射-pojo包装类型

    下面说说关于mapper.xml文件中的输入映射 我们看一下之前为User配置的mapper文件UserMapper.xml: [html] view plaincopy <?xml versi ...

  6. POJO类属性使用基本类型还是包装类型(编码规范)

    1.使用包装类型 2.Java编码规范 Java编码规范

  7. pojo类中的布尔类型的变量为什么不能加is

    [强制] POJO类中的布尔类型的变量,都不不要加is,否则部分框架解析会引起序列化错误. 反例: 定义为基本数据类型boolean isSuccess:的属性,他的方法也是isSuccess();R ...

  8. java中的POJO类属性建议使用包装数据类型

    1.说明 POJO 类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何NPE(NullPointerException,空指针异常) 问题,或者入库检查,都由使用者来保证. 2.举例 ...

  9. 实体类中用基本类型好,还是用包装类型

    实体类中用基本类型好,还是用包装类型好? 如果您也考虑这个问题欢迎指正我的观点,如果您正在考虑这个问题,欢迎评论一起讨论一下这个问题 刚才又想到了关于module或者实体类的建立的问题,用基本类型(i ...

最新文章

  1. 程序员开发进度太慢被告上法庭!公司索赔90万,拿出百度词条当证据
  2. 2.2.2 指数加权平均
  3. 解决spring-boot-maven-plugin not found爆红
  4. (第五篇)Linux操作系统基本结构介绍
  5. Linux就应该这么学第七课-文件的特殊权限
  6. mysql if 多个_MySQL使用IF语句CONCAT多个字段
  7. java使用xml存储数据_用存储过程和 JAVA 写报表数据源有什么弊端?
  8. Python 生成器 和 yield 关键字
  9. 80-20-075-原理-Flink内存管理
  10. 老李分享:接电话扩展之uiautomator 1
  11. 关于计算性能的若干重要事实
  12. LOJ 6070基因 回文树 分块
  13. 自学java到可以找工作要多久_自学编程需要多久才能找到工作?
  14. win10锁屏c语言,Win10秘笈:如何在锁屏打开任意应用程序?
  15. qq邮箱的发件服务器怎么设,如何利用QQ邮箱实现网站SMTP发信,详细邮箱的配置教程...
  16. Android中集成支付宝
  17. 【dqmp项目笔记】
  18. jmeter接口测试3-正则表达式提取器的使用
  19. iOS OC Sugars collection
  20. linux学习(一)虚拟机界面全屏

热门文章

  1. FFmpeg添加字幕的详细操作
  2. 毕业设计-基于 BP 神经网络的房地产价值评估研究-matlab
  3. 海思高端处理器追上联发科,一线大厂如坐针毡
  4. 日文假名全半角转换空格删除
  5. IPv4 客户与IPv6服务器_UNP
  6. mysql截取点前面两位的字符串,Mysql字符串截取函数SUBSTRING的用法说明
  7. tcp四次挥手为何最后要等待2MSL时间?
  8. 前端读取Excel文件(使用js-xls插件)
  9. Win11C盘变红怎么办?Win11C盘变红的清理方法
  10. 跨域问题 php 解决办法