pojo类属性必须使用包装类型,这是强制规范,核心目的是用null准确表达“未赋值”或“数据库null”,避免基本类型默认值(如0、false)掩盖业务语义。

POJO 类属性必须用包装类型,不是建议,而是强制要求。核心目的只有一个:让 null 能真实表达“未赋值”或“数据库 null”,而不是被基本类型默认值(如 0、false)悄悄覆盖。
严格使用包装类型声明所有 POJO 字段
DAO 层、DTO、VO、BO 等业务对象中,所有字段一律声明为包装类(Integer、Long、Boolean、Double 等),禁止出现 int、long、boolean 等基本类型。
- 例如:
private Integer score;✅,而非private int score;❌ - 布尔字段也需注意命名:用
isDeleted会导致框架误解析为deleted,应改为deleted并配getDeleted()/setDeleted() - 不要给包装类型字段设置默认值(如
private Long id = 0L;),否则反序列化时"id":null会被覆盖成0
禁用自动装箱/拆箱敏感场景
包装类型参与运算或判断时,若未判空,极易触发 NullPointerException。这不是规范漏洞,而是使用责任。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 避免直接比较:
if (status == 1)→ 改为Objects.equals(status, 1)或先判空 - 数值计算前校验:
score != null ? score * 0.8 : 0,而非score * 0.8 - RPC 返回值、HTTP 请求参数绑定(如 Spring MVC 的
@RequestBody)必须用包装类型,否则null传入会变成默认值,掩盖业务语义
配置静态检查工具拦截违规代码
仅靠人工记忆不可靠,需通过工程化手段固化规约。
- 在 Maven 中引入
alibaba-p3c-plugin(阿里巴巴 Java 代码规约扫描插件),启用FieldShouldBeWrapperTypeRule规则 - IDEA 安装 Alibaba Java Coding Guidelines 插件,开启实时高亮提示
- CI 流水线中集成 Checkstyle 或 SonarQube,对
POJO包路径下的类做字段类型强制校验,失败则阻断构建 - 自定义 Lombok 注解处理器(如配合
@Data时自动拒绝基本类型字段),或使用@Builder+ 构造器约束增强可读性
统一转换与序列化策略
不同组件对 null 的处理逻辑不一致,需统一收口。
- Jackson 反序列化时,配置
DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES为false(默认),但前提是字段已是包装类型;若误用基本类型,该配置无效 - DTO 与 POJO 转换时,禁用
BeanUtils.copyProperties这类反射型工具——它无法处理基本类型与包装类型的隐式转换;改用 MapStruct 或手动映射,显式控制null传播逻辑 - MyBatis 映射结果中,确保
resultMap的jdbcType与字段类型匹配(如INTEGER对应Integer),避免因类型不匹配导致null被忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










