You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ArrayList的null与isEmpty校验最佳实践及业务场景问题处理

ArrayList空校验最佳实践

核心校验逻辑实现

避免空指针异常的核心原则是:先判断null,再判断isEmpty,利用Java逻辑与(&&)的短路特性,只要前半段判断为null,后半段的isEmpty方法就不会执行,自然不会抛出空指针。

可以先封装一个通用的列表非空判断工具方法,避免重复写校验逻辑:

// 通用校验方法:列表不为null且包含至少一个元素时返回true
public static <T> boolean isNotEmpty(List<T> list) {
    return list != null && !list.isEmpty();
}

如果项目已经引入了常用工具包,可以直接用现成的API:

  • Apache Commons Collections:CollectionUtils.isNotEmpty(list)
  • Spring Core:!CollectionUtils.isEmpty(list)

业务场景代码改造

用上面封装的isNotEmpty方法调整分支逻辑即可覆盖所有边界场景:

List<Result> resultList = new ArrayList<>();
if (isNotEmpty(listA) && isNotEmpty(listB)) {
    // 两个列表都有值,调用两次存储过程合并结果
    resultList.addAll(queryByListA(listA));
    resultList.addAll(queryByListB(listB));
} else if (isNotEmpty(listA)) {
    // 只有listA有值
    resultList.addAll(queryByListA(listA));
} else if (isNotEmpty(listB)) {
    // 只有listB有值
    resultList.addAll(queryByListB(listB));
}
// 两个列表都为空的场景可按需添加默认处理逻辑

上述逻辑可以覆盖所有输入场景:

  • 列表为null时返回false,不会走入对应分支
  • 列表为空列表[]时返回false,不会走入对应分支
  • 只有列表确实包含元素时才会执行对应查询逻辑

额外最佳实践建议

  • 入参前置处理:如果是外部传入的列表参数,可以在接收时就默认初始化为空列表List<String> listA = Objects.requireNonNullElse(originList, Collections.emptyList());,后续所有逻辑不需要再判断null,仅需判断isEmpty即可,大幅简化代码
  • 避免反向判断踩坑:不要写list.isEmpty() || list == null这种顺序的判断,会直接触发空指针异常
  • 优先用成熟框架的工具类实现,不需要自行重复造轮子,成熟工具类的边界场景处理更完善

内容的提问来源于stack exchange,提问作者user7599667

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:36:10