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 判断,提升代码可读性与健壮性。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
立即学习“Java免费学习笔记(深入)”;
- 不推荐写法(冗余、易遗漏):
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)(放宽了限制,失去保护意义)

















