java - 如何在没有 throws 子句的情况下实现在接口(interface)中定义的方法时添加 throws Exception 子句?

标签 java exception-handling iterator

我需要一个类来在集合中导航,然后我实现了 Iterator 接口(interface)。 但问题是,我实现的next()方法需要抛出一个Exception,因为集合成员需要动态生成,在生成过程中可能会出现Exception。

next() 抛出的唯一异常是 NoSuchElementException,这意味着集合中不再有元素,这不符合我的需要。

或者,我根本不应该实现迭代器?

最佳答案

迂腐地说,如果您需要添加已检查的异常,则您没有实现 Iterator.next。 Iterator.next 不抛出已检查的异常,所以基本上 Iterator.next 有约定,用户真正需要考虑的是,没有什么太糟糕的地方会出错(与 File.open 相反,你必须担心 IOExceptions 被抛出)。

鉴于此,我会按顺序考虑以下选项:

  • 我可以删除已检查的异常并用未检查的异常替换它们吗?这将是我的第一次尝试,因为检查异常每次出现都会引起相当大的轰动。这很容易解决您的解决方案,因为这样您的 next() 就不会再抛出已检查的异常。如果它是第三方库,我可以包装它(无论如何,这将是个好主意)并将这些异常转换为包装器中的检查异常?

  • 我可以将异常包装在迭代器的运行时异常中吗?有构造函数可以执行此操作(那些具有 Throwable 的构造函数)。这至少会封装您在内部使用的内容并允许您使用 Iterator 接口(interface)

  • 我可以用 Iterable 替换 Iterator 吗?如果是这样,我可以在 Iterable 的创建过程中抛出这些已检查的异常,然后迭代器就不能抛出异常。这仅在元素数量不大的情况下才有效。

关于java - 如何在没有 throws 子句的情况下实现在接口(interface)中定义的方法时添加 throws Exception 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4450138/

相关文章:

java - Android:如何更改日期选择器分隔线的颜色?

java - 如何在 Java VisualVM 中显示分析器选项卡?

C#:多个 catch 子句

c# - .NET 返回值与抛出的异常设计问题

python - 为什么 iter 不是实例的方法而 __iter__ 是?

java - Java/Android 中的用户挑战关系设计

java - 如何在以下代码中根据我的喜好设置 JTextArea 和 JTextField 的大小?

exception - 使用View-Controller-Service体系结构在Grails中运行时错误处理

c# - 命名迭代器和异常

Java - 将迭代器与数组一起使用