gpt4 book ai didi

java - Iterable 中的异常处理

转载 作者:行者123 更新时间:2023-11-29 09:58:04 25 4
gpt4 key购买 nike

有没有办法在保持 foreach 语法糖的同时处理并继续处理迭代器中的异常?

我有一个解析器,它遍历文件中的行,每行返回一个类。有时行在句法上是伪造的,但这并不一定意味着我们不应该继续阅读文件。

我的解析器实现了 Iterable,但是处理潜在的异常意味着编写

for (Iterator iter = myParser.iterator(); iter.hasNext(); ) {
try {
MyClass myClass = iter.next();
// .. do stuff ..
} catch (Exception e) {
// .. do exception stuff ..
}
}

.. 这没什么问题,但是有什么方法可以对 foreach 构造中隐含的单个 iter.next() 调用进行异常处理吗?

最佳答案

就我个人而言,我会使用 guava 来做到这一点的(以前的谷歌 Collection )AbstractIterator -- 请参阅该类的 Javadoc 以获取一个简单的 null 跳过示例,该示例可以轻松修改:

public static Iterator<MyClass> skipExceptions(final Iterator<MyClass> in) {
return new AbstractIterator<MyClass>() {
protected String computeNext() {
while (in.hasNext()) {
try {
return in.next();
} catch (MalformedThingyException e) {
// Do nothing, skip to the next one
}
}
return endOfData();
}
};
}}

然后使用它时就很简单:

for (MyClass thing : skipExceptions(myParser.iterator()) { 
// Do something ONLY to those items that didn't cause an exception
}

是的,它有点冗长,但它也是通用的并且易于重用(并且在调用端非常干净)。

关于java - Iterable 中的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com