【问题标题】:Java - Iterator that might failJava - 可能失败的迭代器
【发布时间】:2012-11-14 06:24:29
【问题描述】:

如标题中所述,我正在尝试针对某些数据设计一个迭代器,这可能会在某处失败。一个示例是 Iterator<DatabaseObject>,它会在调用 next() 时从 DB 读取下一行并继续。其他示例可能包括使用引发异常的 API 对象处理数据。问题是在这种情况下如何响应,因为不允许迭代器引发任何异常......我们应该抛出NoSUchElementException 并在那里提供有意义的消息吗?

【问题讨论】:

    标签: java exception iterator


    【解决方案1】:

    您可以抛出未经检查的异常。抛出NoSuchElementException 是有意义的,因为事实上,一个错误阻止了这样一个元素的出现。

    如果异常可以包装任何底层异常,那就太好了。不幸的是,NoSuchElementException 没有接受另一个异常的构造函数。因此,如果您想将根本原因向上传播,则必须走另一条路,例如抛出RuntimeException

    try {
        ...
    } catch (<some exception type> e) {
        throw new RuntimeException("Next element not accessible", e);
    }
    

    或者,您可以返回一些保留值(例如null)。

    【讨论】:

      【解决方案2】:

      我认为这取决于您要如何处理错误。 也许您想阅读 hasNext() 中已经存在的下一个条目,以便在出现问题时返回 false。 从客户的角度考虑。 客户应该如何反应?

      【讨论】:

        【解决方案3】:

        我见过的大多数 API 都试图制造“可能失败的迭代器”,但最终结果却很糟糕。我强烈建议您不要为此使用Iterator

        【讨论】:

          猜你喜欢
          • 2015-02-25
          • 2020-07-31
          • 2016-05-04
          • 1970-01-01
          • 2011-02-05
          • 2010-11-25
          • 1970-01-01
          • 2015-12-21
          • 2011-01-25
          相关资源
          最近更新 更多