Objects.checkIndex()是Java 9引入的索引校验方法,用于验证index是否在[0, length)范围内,合法则返回index,越界则抛出带详细信息的IndexOutOfBoundsException。

Objects.checkIndex() 是 Java 9 引入的实用方法,专用于在访问数组、List 等基于索引的结构前,快速验证索引是否处于合法范围(即 0 ≤ index )。它比手写 <code>if (i = len) 更简洁、语义更清晰,且自动抛出带详细信息的 IndexOutOfBoundsException。
核心用法:校验单个索引是否在 [0, length) 范围内
该方法接收两个参数:待检查的索引值 index 和边界上限 length(通常是数组长度或集合大小),返回原样索引(便于链式调用)。若越界,立即抛出异常,消息格式为 "Index {index} out of bounds for length {length}"。
示例:
int[] arr = {10, 20, 30};
int i = 5;
// 安全校验后取值
int value = arr[Objects.checkIndex(i, arr.length)]; // 抛出 IndexOutOfBoundsException: Index 5 out of bounds for length 3
配合数组访问:避免手动边界判断
在自定义数组工具方法或封装类中,直接将 checkIndex 嵌入下标访问前,可消除重复的 if 判断,提升代码可读性与健壮性。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 不推荐写法(冗余、易遗漏):
if (i = arr.length) throw new IndexOutOfBoundsException(...); return arr[i]; - 推荐写法(一行完成校验+访问):
return arr[Objects.checkIndex(i, arr.length)];
与 List.get() 协同使用:统一索引安全策略
虽然 List.get() 本身会检查索引,但若你在实现包装类、缓存逻辑或预校验场景中需提前拦截非法索引,checkIndex 可提供更早、更可控的失败点。
- 例如,在日志中记录非法访问前就拒绝:
int idx = Objects.checkIndex(userInput, list.size()); // 提前失败,便于监控 - 再如,对多个索引批量校验(需循环调用):
for (int i : indices) { Objects.checkIndex(i, list.size()); }
注意边界语义:length 不是最大合法索引
Objects.checkIndex(index, length) 检查的是 index ∈ [0, length),即合法索引最大为 length - 1。这与数组/ArrayList 的自然语义完全一致,但容易误传成 maxIndex。
- ✅ 正确:
Objects.checkIndex(i, arr.length) - ❌ 错误:
Objects.checkIndex(i, arr.length - 1)(会错误拒绝最后一个元素) - ❌ 错误:
Objects.checkIndex(i, arr.length + 1)(放宽了限制,失去保护意义)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










