java.lang.IndexOutOfBoundsException:索引 0 超出长度 0 的界限,我不明白?

java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0 , I don't understand?

提问人:JhinKazama 提问时间:6/20/2023 更新时间:6/20/2023 访问量:193

问:

我在确定数组不为空时收到此错误,这是代码:

            REPORT.info("Removing meta_field id {} from metamodel id {}", Integer[]{oldMetaFieldId, metamodelId);

            App.get(MetamodelFieldService.class).remove(metamodelId, new Integer[]{oldMetaFieldId});

我将报告放在调用方法“remove”之前,以确保变量 oldMetaFieldId 不是 null,也不是我检查了日志:

2023-06-20 15:12:21,776  INFO [main] FusionChampsFiches - Removing meta_field id [1007] from metamodel id 215

以下是“remove”方法的实现:

  public void remove(Integer metamodelId, Integer[] metaFieldIdList) {
    for (Integer metaFieldId : metaFieldIdList) {
      MetamodelField ex = new MetamodelField();
      ex.setMetamodelId(metamodelId);
      ex.setMetaFieldId(metaFieldId);
      List<MetamodelField> entityList = getDao().findByExample(ex);

      entityList.get(0);
      remove(entityList.get(0));
    }
    MetaModelCache.getCache().clear(getApplicationSession());
  }

我不明白为什么我会收到这个错误

java.lang.IndexOutOfBoundsException:索引 0 超出长度范围 0

Java 数组 循环 IndexOutOfBoundsException

评论

1赞 Jelmen 6/20/2023
“entityList”似乎是空的 ->这就是您无法获取 0 的方式。元素中的 entityList.get(0)

答:

1赞 Elliott Frisch 6/20/2023 #1

除了存在之外,它也可能是的(什么都不包含)。在这种情况下,这正是问题所在。中没有任何内容,因此您无法获取第一个元素(没有)。一种解决方案,检查是否为空。喜欢ListnullList

List<MetamodelField> entityList = getDao().findByExample(ex);
if (!entityList.isEmpty()) {
    entityList.get(0);
    remove(entityList.get(0));
}

或者使用迭代器。喜欢

List<MetamodelField> entityList = getDao().findByExample(ex);
Iterator<MetamodelField> iter = entityList.iterator();
if (iter.hasNext()) {
    MetamodelField mf = iter.next();
    iter.remove();
}