首页 > 其他分享 >基本数据类型与包装数据类型的使用标准

基本数据类型与包装数据类型的使用标准

时间:2024-08-16 10:16:18浏览次数:7  
标签:拆箱 包装 数据类型 标准 使用 NPE null

这段使用标准主要是为了在编写代码时处理好基本数据类型和包装数据类型的选择问题,避免一些潜在的风险。

1. 【强制】所有的 POJO 类属性必须使用包装数据类型

POJO(Plain Old Java Object)类通常用作数据传输对象,属性可能会与数据库字段直接映射。由于数据库字段可以为 null,如果 POJO 类属性使用基本数据类型(如 intboolean 等),而数据库查询结果中该字段为 null,在进行自动拆箱时会发生 NullPointerException (NPE)。

理解:

  • 使用包装数据类型(如 IntegerBoolean 等),可以避免 NPE,因为包装类型可以为 null,这与数据库字段的 null 值对齐。
  • 包装类型允许更灵活的表示,例如通过 null 表示未赋值或异常情况。

2. 【强制】RPC 方法的返回值和参数必须使用包装数据类型

在远程调用(RPC)中,服务可能会返回 null 作为结果,或者传递 null 作为参数。如果使用基本数据类型,null 值会被自动拆箱为默认值(如 0false),可能导致不期望的行为。

理解:

  • 包装类型允许通过 null 表示特殊情况,如远程调用失败、数据缺失等。
  • 使用包装类型可以避免不合理的默认值带来的误导,例如 null 转换为 0 而显示为错误的数据。

正例:

  • 数据库查询结果可能是 null,如果用基本数据类型(如 int)接收,null 被拆箱为 0,会导致 NPE 或错误结果。使用包装类型 Integer 可以避免此问题。

反例:

  • 在页面显示成交总额涨跌情况时,x 为基本数据类型,如果远程调用失败,结果 null 被自动拆箱为 0,页面显示为 0%,这是不合理的,应该使用包装类型 Integer,通过 null 表示调用失败,并在页面上显示中划线(-)以提示异常情况。

3. 【推荐】所有的局部变量使用基本数据类型

局部变量通常在方法内部使用,生命周期较短,并且在大多数情况下不会出现 null 的情况。使用基本数据类型可以减少包装类型的拆箱和装箱开销,提高性能。

理解:

  • 局部变量一般无需表示 null 或特殊情况,使用基本数据类型更高效。
  • 由于局部变量的作用域较小,开发者可以更容易地掌控变量的赋值和使用,避免 NPE。

总结

  • POJO 类属性和 RPC 方法的参数/返回值:使用包装类型,避免因为数据库 null 值或远程调用异常导致的 NPE,且包装类型允许使用 null 来表达一些额外的信息(如异常或未赋值)。
  • 局部变量:推荐使用基本类型,性能更高,且在局部范围内较容易控制变量的状态。

标签:拆箱,包装,数据类型,标准,使用,NPE,null
From: https://www.cnblogs.com/echohye/p/18362368

相关文章

  • 参与团体标准的意义以及作用
    随着经济的快速发展和科技的不断进步,行业的规范与统一变得愈发重要。团体标准应运而生,成为了推动行业前行的强大力量。参与其中,其所带来的作用和意义犹如璀璨星辰,照亮了发展的道路参与团体标准具有诸多显著的作用,主要体现在以下几个方面:1.提升行业话语权:参与团体标准的制定......
  • 在vue中封装第三方组件的标准
    在Vue.js项目中,经常会用到各种第三方组件库来提升开发效率和用户体验。然而,直接使用这些组件可能会导致代码结构混乱、样式冲突等问题。为了保持项目的整洁和可维护性,我们需要优雅地封装这些第三方组件。下面是一篇关于如何在Vue中优雅地封装第三方组件的文章。如何在Vue中优......
  • mysql数据库中decimal数据类型比较大小
    在MySQL中,DECIMAL数据类型用于存储精确的数值,它非常适合用于需要高精度计算的场景,如金融应用。当我们需要在MySQL数据库中比较DECIMAL类型数据的大小时,可以使用标准的比较运算符,如>,<,>=,<=,=和<>(或!=)。以下是一个详细的示例,说明如何在MySQL中使用DECIMAL数据类型并比较......
  • mysql数据库中decimal数据类型比较大小
    在MySQL中,DECIMAL数据类型用于存储精确的数值,它非常适合用于需要高精度计算的场景,如金融应用。当我们需要在MySQL数据库中比较DECIMAL类型数据的大小时,可以使用标准的比较运算符,如>,<,>=,<=,=和<>(或!=)。以下是一个详细的示例,说明如何在MySQL中使用DECIMAL数据类型并比较它......
  • [Python学习日记-6] 基本数据类型(上)
    简介    在学习数据类型之前我们要先回答一个问题:为什么计算机要有数据类型呢?计算机不是很NB,很智能吗,为什么会需要人类标注好数据的具体类型呢?这里就要从计算机的角度看一下数据是什么形式的了,举个例子:Jove和1234,这两个数据在我们看来是很清晰的,左边的是字符串,右边......
  • 数据类型
    数据类型大数类structBigint{ intsign;stringdigits; /*====================*/ Bigint(void){} Bigint(stringb){(*this)=b;} Bigint(intb){(*this)=to_string(b);} /*====================*/ intsize(void) { returndigits.size(); } Bigin......
  • 宏工科技发力包装领域,解决超细粉料包装难点
    在追求高效、精准与环保并重的现代工业制造中,传统包装方式在面对超细粉料等特殊物料时,往往显得力不从心。宏工科技作为物料处理领域的佼佼者,切入散料自动化包装领域,为行业带来了多款一站式包装解决方案。其中,针对超细粉料等特殊物料包装过程易漏粉、易架桥、包装成本高等问题,推......
  • C++标准库 algorithm 堆操作 heap
    算法库-堆操作基本操作make_heap()(1)从一个元素范围创建出一个最大堆(2)将区间内的元素转化为heap.--传比较器push_heap()对heap增加一个元素.将一个元素加入到一个最大堆pop_heap()对heap取出下一个元素.从最大堆中移除最大元素sort_heap()对heap转化为一......
  • C++标准库 iomanip 输入输出操纵符 Manipulator
    输入/输出操纵符输入输出操纵符是C++中用于控制输入输出流格式的一组特殊函数或对象。它们通常用于格式化输出,例如设置宽度、精度、对齐方式等,而不涉及数据的实际读写。功能概述:输入输出操纵符能够控制输出的外观,比如调整对齐方式、设置输出的宽度和精度、控制换行等。使用......
  • ITSS中的IT服务治理:标准化、模型、框架与实施指南
    引言随着信息技术的飞速发展,企业对于信息技术的依赖程度日益加深。如何有效地管理和利用信息技术资源,确保信息技术能够为企业创造价值,实现战略目标,已成为企业面临的重要课题。IT服务治理(ITServiceGovernance,简称ITSG)作为信息技术管理的重要组成部分,其重要性不言而喻。中国信......