面向初学者的IndexOutOfBoundsException问题:操作Engineer类ArrayList抛异常
错误原因
你传入方法的是刚初始化的空ArrayList,此时集合的size()为0,不存在索引为0的元素,直接调用aa.get(0)会直接触发IndexOutOfBoundsException。你原有的逻辑只覆盖了「索引0位置元素为null」的场景,没有考虑列表长度不足、根本不存在该索引的情况。
修复方案
调整判断逻辑,先校验列表长度是否满足取索引0的条件,同时建议给方法参数加上泛型约束,避免类型安全问题,修复后代码如下:
ArrayList<Engineer> newEmptyEngineerList = new ArrayList<>(); findLastEngineer(newEmptyEngineerList); // 增加泛型声明,匹配存储Engineer类型的列表,提升类型安全性 public static void findLastEngineer(ArrayList<Engineer> aa){ // 先判断列表长度是否大于0,再判断索引0的元素是否非空 if (aa.size() > 0 && aa.get(0)!=null){ System.out.println(aa.get(0)); } else { Engineer eng = new Engineer(); aa.add(0,eng); System.out.println(aa.get(0)); } }
修复说明
- 新增
aa.size() > 0前置判断,只有列表存在索引0元素时才会执行取值操作,完全规避索引越界问题 - 空列表状态下执行
add(0, eng)是合法操作,不会触发异常,可以正常将新建的Engineer对象插入到索引0位置
内容的提问来源于stack exchange,提问作者user13561105
相关产品推荐
相关产品推荐

