【发布时间】:2023-03-20 09:34:02
【问题描述】:
如果while (iterator.hasNext())发生异常,如何继续迭代循环?
所以我想做下面这样的事情。
try {
loop: while (iterator.hasNext()) // as excetion is on this line excetion will be catch by catch_2
{
try {
Result res = (Result) iterator.next();
list.add(res);
} catch (Exception e) { // catch_1
e.printStackTrace();
}
}
} catch (Exception e) { // catch_2
// goto start of the loop
continue loop;
}
Iterator<UserProvisioning> iterator = beans.iterator();
while (iterator.hasNext()) {
try {
UserProvisioning userProvisioning = (UserProvisioning) iterator.next();
System.out.println(userProvisioning.getFIRST_NAME());
list.add(userProvisioning);
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error("Error occured...)
}
}
根据我的理解,iterator.hasNext() 尝试通过将 csv 记录列映射到 POJO 字段来检查下一个元素是否存在,并且由于 csv 记录标题中存在无效数据,因此计数与记录文件不匹配,因此错误
java.lang.RuntimeException: com.opencsv.exceptions.CsvRequiredFieldEmptyException: Number of data fields does not match number of headers.
所以我正在尝试记录错误并继续迭代下一条记录。
编辑
iterator.hasNext() 应该返回 true 或 false 但它的抛出错误
【问题讨论】:
-
有什么用?您想将异常抛入无穷大吗?例如:迭代器为空,您希望您的日志显示数以百万计的 NPE 被记录吗? (你甚至不记录它们)
-
请查看更新后的问题
-
为什么hasNext会抛出异常?我从来没有看到过迭代器的定义。
-
@suiwenfeng 不,我在异常记录之后有下一个元素(记录),并且由于异常之后有记录,这意味着 hasNext() 应该检查结果是否不为空(并返回 true)
-
不,hasNext 应该返回 true 或 false,没有异常。
标签: java loops exception try-catch