SpotBugs 报 NP_NULL_ON_SOME_PATH,指向的方法第一行就写了 if (x == null) return,告警挂在那里一直消不掉。日志里能对上时间点,这种反而好排。

判空写在调用方或另一个重载方法里,被分析的方法参数没有可空标注,SpotBugs 按默认非空推断,仍认为这条路径会解引用,报告里给的行号也只是就近定位。这一点先确认清楚,后面就不用反复试。

mvn spotbugs:check -Dspotbugs.effort=Max
# 只分析指定包
mvn spotbugs:check -Dspotbugs.onlyAnalyze=com.demo.order.*

这次卡住的地方就在「SpotBugs 空指针告警」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

处理上按这个顺序:给参数和返回值补上可空与非空注解;把判空移到解引用之前的同一个方法内;确认误报的加抑制注解并写明理由。

结果对不对很好判断,该条告警消失,其余空指针告警数量和改动前保持一致。

作者 9823189