【问题标题】:Overriding method throws checked exception not defined in interface覆盖方法抛出未在接口中定义的检查异常
【发布时间】:2014-12-28 21:41:06
【问题描述】:

假设我有一个接口DataStore,它的方法是public List<Entity> getEntities()SqlDataStore 类实现了这个接口。问题是,当调用 SqlDataStore.getEntities() 时,可能会抛出 SQLException。我无法更改接口以将此已检查异常添加到方法签名中,因为您还可以编写一个实现XmlDataStore,它正在访问 XML 文件以获取数据。我应该如何处理实现可能抛出的检查异常?

【问题讨论】:

  • 将它们包装在未经检查的异常中。
  • 是的,或者更好的是,将它们包装在您的界面允许您抛出的任何类型的异常中。
  • 我不明白这个问题。您可以更改接口以将检查的异常添加到方法签名中。 XmlDataStore 中的方法不必声明它会抛出异常。
  • @pbabcdefp 这样我就必须添加实现可能抛出的每种异常类型。这是一个常见的解决方案吗?
  • @SotiriosDelimanolis 你的意思是定义我自己的异常类型,比如DataStoreException,其中包含对抛出异常的引用并将这个添加到接口方法中?

标签: java interface


【解决方案1】:

好的,这是我在缺乏更好想法的情况下所做的。我定义了一个扩展RuntimeException 的类DataStoreException。我从接口定义中删除了 throws 子句。当在实现DataStore 的类之一中引发检查异常时,我只是捕获它并将其包装在DataStoreException 中并重新抛出它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多