## 任务目标
请排查 Java 空值传播与包装类型的边界问题。
以核查和评审为主,给出有证据的判断及可复核的修改建议;本次用户另有明确实现要求时,按其授权范围执行。
## 输入信息(选填)
两项均可留空,也可直接用一句话说明目标并附上已有资料。无需自行整理版本、配置或完整需求表;能读取的内容由执行者补齐。
空值字段链:
工程与字段资料:
## 信息不完整时
先使用本次对话中已经说明的信息;用户留空、写“暂无/不清楚”或未替换输入标记,都按缺失处理,不当作真实路径、参数或业务值。已能从资料确定的内容不重复询问,不编造文件、日志、接口、业务值或执行结果。在用户已授权的范围内读取相关工程和材料,不为补齐输入擅自扩大操作范围。
### 优先确认
- 沿缺字段、显式 null、无记录和外部不完整响应追踪到业务运算及展示。
- 检索包装类型比较、自动拆箱、集合元素及默认值转换。
- 核对数据库可空、入口校验、字段注释和响应模型是否一致。
- 读取对象值相同但实例不同、正常值与空值的既有测试。
### 可采用的默认处理
- 默认只读排查并给修复片段,不批量把 null 改为零或空字符串。
- 业务含义缺失时保留未知与合法零值的区别,已有契约优先。
- 对无源码依赖按声明契约和输入样例分析,不编造其内部返回保证。
### 必须有依据的事项
- 空值代表未知、未提供、关闭还是无记录缺少业务定义时,不替用户决定默认值或改变公共字段类型。
只有缺口会改变业务结果、权限边界或关键实现,且无法从现有资料确认时,才集中提出最多 3 个关键问题;说明影响,并继续完成不依赖答案的部分。一般命名、排版和可逆实现细节按现有约定决定,不逐项等待确认。
### 资料仍不足时的交付
- 无工程时交付空值传播与包装比较的独立测试样例,以及入口、映射和运算层的校验选择表。
- 仅有字段定义时先完成空值语义疑点和边界请求矩阵,触发路径保留待验证。
## 执行要求
适用范围:使用Java对象、包装类型和常见持久化框架的业务代码;具体映射和校验行为以JDK与依赖版本为准。
检查包装值比较和自动拆箱中的空值风险,不假定远程调用或数据库查询总能返回值。
检查步骤:
1. 画出目标字段从请求、查询或远程响应到业务计算、持久化及展示的传播路径,区分未提供、未知、无记录、零值和空字符串,不能把所有情况自动合并。
2. 找出可空值参与比较、算术、条件判断、方法返回和集合操作的位置,为每个疑点指出确切输入及可能结果;对无源码依赖只列待验证的接口契约。
3. 检查默认值是否改变业务事实,例如未知计数被展示成零、未提交配置被当成关闭;将需要拒绝输入、保留为空或业务兜底的场景分别列出理由。
4. 对对象比较与集合元素给出包含空值、相同值和不同实例的样例,检查现有结果是否稳定;避免只针对小范围数值验证而遗漏实际业务标识。
5. 提出最小修复,明确校验应放在入口、转换层还是计算前;说明对已有数据和外部调用方的影响,不为消除异常随意改变公共字段类型或业务默认值。
6. 设计能区分修复前后行为的测试,覆盖缺字段、显式空值、查询无记录、远程返回不完整和混合集合;同时保留正常业务样例,记录真正执行的结果。
## 交付与验收
输出要求:先给空值语义表,再给风险清单、修正代码与测试矩阵。每个风险须给出“来源字段|传播路径|触发输入|错误业务结果”,无法重现的项目保持待验证状态。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。
### 本条完成检查
- 风险表包含来源字段、传播路径、触发输入和错误业务结果。
- 修复建议说明校验位置、旧数据与调用方兼容性,不以消除异常掩盖未知事实。
- 用例覆盖缺字段、显式空值、无记录、外部缺项与混合集合,并保留正常样例。
按本条要求组织结果,使用简洁中文和一致的编号、术语、缩进及空行;已有项目格式优先。只说明实际完成的内容,将采用的假设、未完成项和缺少的条件写在相关位置,不额外生成无关文档。未执行、无法复现或缺少证据的检查如实标注,不宣称已通过或已有性能收益。
## 参考资料与适用边界
来源(核验日期:2026-09-08):
[阿里巴巴《P3C-PMD 官方公开规则》](https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md)
整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。