【发布时间】:2016-08-29 23:36:26
【问题描述】:
我正在使用 Java 7,遇到了一些非常有趣的事情。在使用我自己的接口扩展 java.lang.Appendable 接口时,我明确地重写了每个方法以用于文档目的。
java.lang.Appendable 中定义的所有三个方法都会抛出 IOException,我认为我的覆盖方法也必须声明。但是,我最终删除了其中一个被覆盖方法上的 throws 子句,奇怪的是 Java 7 编译器并没有抱怨缺少声明。所以我继续从其他两个方法中删除了 throws 子句,编译器没有抱怨。
那么为什么我可以覆盖接口中的方法并删除它的 throws 子句?什么时候这种现象在 Java 中变得合法了?
【问题讨论】:
-
为什么不合法?为什么你必须错误地声明你的方法会抛出一个你知道它不会抛出的异常?
-
我在想如果有人说 Appendable a = new MyInterfaceImpl();当他们说 a.append("Foo");他们的代码仍然必须尝试捕获 IOException(他们会这样做)。但我想如果 MyInterface 不为 Appendable 方法抛出 IOException 是有道理的,那没关系,因为 MyInterface 实现永远不会抛出 IOException。我只是惊讶地看到这项工作就是这样。感谢您的洞察力!
标签: java exception interface overriding