提问人:JhinKazama 提问时间:6/20/2023 更新时间:6/20/2023 访问量:193
java.lang.IndexOutOfBoundsException:索引 0 超出长度 0 的界限,我不明白?
java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0 , I don't understand?
问:
我在确定数组不为空时收到此错误,这是代码:
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
答:
1赞
Elliott Frisch
6/20/2023
#1
除了存在之外,它也可能是空的(什么都不包含)。在这种情况下,这正是问题所在。中没有任何内容,因此您无法获取第一个元素(没有)。一种解决方案,检查是否为空。喜欢List
null
List
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();
}
评论