java - Java 接口(interface)不声明任何异常。如何管理执行的检查异常?

标签 java exception-handling interface

假设我有以下我可能不会修改的 Java 接口(interface):

public interface MyInterface {
  public void doSomething();
}

现在实现它的类是这样的:

class MyImplementation implements MyInterface {
  public void doSomething() {
    try {
      // read file
    } catch (IOException e) {
      // what to do?
    }
  }
}

我无法从不读取文件中恢复过来。

RuntimeException 的子类显然可以帮助我,但我不确定这样做是否正确:问题是该异常不会记录在类和用户中类(class)的学生可能会得到那个异常(exception),但对解决这个问题一无所知。

我能做什么?


我们都同意:界面有问题。

我选择的方案

我最终决定编写一个 MyVeryOwnInterface 来扩展 MyInterface 并添加 MyRuntimeException 作为错误方法签名的一部分:

public interface MyVeryOwnInterface extends MyInterface {
  public void doSomething() throws MyRuntimeException;
}
class MyImplementation implements MyVeryOwnInterface {
  public void doSomething() throws MyRuntimeException {
    try {
      // read file
    } catch (IOException e) {
      throw new MyRuntimeException("Could not read the file", e);
    }
  }
}

最佳答案

您遇到了 leaky abstractions 的问题.没有真正好的解决方案,使用 RuntimeException 几乎是您唯一可以做的事情。

可以说,这也是为什么检查异常是一个失败概念的一个例子。

关于java - Java 接口(interface)不声明任何异常。如何管理执行的检查异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2738827/

相关文章:

android - 处理 Android 自定义内容提供程序中的(跨进程)异常

java - 如何获取异常源对象

c# - 为什么接口(interface)类型的列表不能接受继承接口(interface)的实例?

C++ 接口(interface)返回一个引用——这是一种不好的做法吗?

Java打印数组错误

java - 当我在构造函数中调用 Autowired 属性时,它为 null

java - 使用默认命名空间时无法解码编码文档

java - 访问静态字段的静态同步方法

delphi - 我什么时候应该使用 "try" block ,我应该使用哪种?

c# 在属性上实现接口(interface)