这段使用标准主要是为了在编写代码时处理好基本数据类型和包装数据类型的选择问题,避免一些潜在的风险。
1. 【强制】所有的 POJO 类属性必须使用包装数据类型
POJO(Plain Old Java Object)类通常用作数据传输对象,属性可能会与数据库字段直接映射。由于数据库字段可以为 null
,如果 POJO 类属性使用基本数据类型(如 int
、boolean
等),而数据库查询结果中该字段为 null
,在进行自动拆箱时会发生 NullPointerException
(NPE)。
理解:
- 使用包装数据类型(如
Integer
、Boolean
等),可以避免 NPE,因为包装类型可以为null
,这与数据库字段的null
值对齐。 - 包装类型允许更灵活的表示,例如通过
null
表示未赋值或异常情况。
2. 【强制】RPC 方法的返回值和参数必须使用包装数据类型
在远程调用(RPC)中,服务可能会返回 null
作为结果,或者传递 null
作为参数。如果使用基本数据类型,null
值会被自动拆箱为默认值(如 0
或 false
),可能导致不期望的行为。
理解:
- 包装类型允许通过
null
表示特殊情况,如远程调用失败、数据缺失等。 - 使用包装类型可以避免不合理的默认值带来的误导,例如
null
转换为0
而显示为错误的数据。
正例:
- 数据库查询结果可能是
null
,如果用基本数据类型(如int
)接收,null
被拆箱为0
,会导致 NPE 或错误结果。使用包装类型Integer
可以避免此问题。
反例:
- 在页面显示成交总额涨跌情况时,
x
为基本数据类型,如果远程调用失败,结果null
被自动拆箱为0
,页面显示为0%
,这是不合理的,应该使用包装类型Integer
,通过null
表示调用失败,并在页面上显示中划线(-
)以提示异常情况。
3. 【推荐】所有的局部变量使用基本数据类型
局部变量通常在方法内部使用,生命周期较短,并且在大多数情况下不会出现 null
的情况。使用基本数据类型可以减少包装类型的拆箱和装箱开销,提高性能。
理解:
- 局部变量一般无需表示
null
或特殊情况,使用基本数据类型更高效。 - 由于局部变量的作用域较小,开发者可以更容易地掌控变量的赋值和使用,避免 NPE。
总结
- POJO 类属性和 RPC 方法的参数/返回值:使用包装类型,避免因为数据库
null
值或远程调用异常导致的 NPE,且包装类型允许使用null
来表达一些额外的信息(如异常或未赋值)。 - 局部变量:推荐使用基本类型,性能更高,且在局部范围内较容易控制变量的状态。