假设我有以下我可能不会修改的 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/