首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中,如何编写类似于Iterable的代码,从而引发异常?

在Java中,如何编写类似于Iterable的代码,从而引发异常?
EN

Stack Overflow用户
提问于 2018-08-30 00:20:57
回答 2查看 0关注 0票数 0

在java中,类可以实现Iterable,允许使用foreach()语句和迭代合成糖:

代码语言:javascript
复制
for(T t:ts) ...

对于这种情况,是否存在常见的习惯用法或Java API?

澄清:这是询问是否存在用于从非内存源迭代对象的模式或替代接口。正如响应者所说的那样,不推荐使用RuntimeExceptions来解决问题,也不建议使用我想要的东西。

EN

回答 2

Stack Overflow用户

发布于 2018-08-30 08:57:00

例如,在C#中,可以轻松编写代码来迭代文本文件的行:

代码语言:javascript
复制
public static IEnumerable<string> ReadLines(string filename)
{
    using (TextReader reader = File.OpenText(filename))
    {
        string line;
        while ( (line=reader.ReadLine()) != null)
        {
            yield return line;
        }
    }
}

用于:

代码语言:javascript
复制
foreach (string line in ReadLines("foo.txt"))

foreach循环调用DisposeIEnumerator一个finally块,转换为“检查,如果我们需要在迭代器块的最后(从using语句)做任何事”。显然,C#中没有经过检查的异常,因此事情的这一方面也不是问题。由于这个原因,一个完整的(有用的!)在Java中几乎不可行。

票数 0
EN

Stack Overflow用户

发布于 2018-08-30 10:05:25

最好的方法是创建RuntimeIOException,如果出现错误,将从hasNext/Next实现中抛出该异常

代码语言:txt
复制
try {
  for (...) {
    // do my stuff here
  }
catch (RuntimeIOException e) {
  throw e.getCause(); // rethrow IOException
}

代码语言:txt
复制
class RuntimeIOException extends RuntimeException {
  RuntimeIOException(IOException e) {
    super(e);
  }

  IOException getCause() {
    return (IOException) super.getCause();
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档