在java中,类可以实现Iterable,允许使用foreach()语句和迭代合成糖:
for(T t:ts) ...
对于这种情况,是否存在常见的习惯用法或Java API?
澄清:这是询问是否存在用于从非内存源迭代对象的模式或替代接口。正如响应者所说的那样,不推荐使用RuntimeExceptions来解决问题,也不建议使用我想要的东西。
发布于 2018-08-30 08:57:00
例如,在C#中,可以轻松编写代码来迭代文本文件的行:
public static IEnumerable<string> ReadLines(string filename)
{
using (TextReader reader = File.OpenText(filename))
{
string line;
while ( (line=reader.ReadLine()) != null)
{
yield return line;
}
}
}
用于:
foreach (string line in ReadLines("foo.txt"))
foreach循环调用Dispose
的IEnumerator
一个finally块,转换为“检查,如果我们需要在迭代器块的最后(从using语句)做任何事”。显然,C#中没有经过检查的异常,因此事情的这一方面也不是问题。由于这个原因,一个完整的(有用的!)在Java中几乎不可行。
发布于 2018-08-30 10:05:25
最好的方法是创建RuntimeIOException,如果出现错误,将从hasNext/Next实现中抛出该异常
try {
for (...) {
// do my stuff here
}
catch (RuntimeIOException e) {
throw e.getCause(); // rethrow IOException
}
class RuntimeIOException extends RuntimeException {
RuntimeIOException(IOException e) {
super(e);
}
IOException getCause() {
return (IOException) super.getCause();
}
}
https://stackoverflow.com/questions/-100000688
复制相似问题