继承为什么Java不支持在方法签名中添加“throws”?
这是一个在我脑海里萦绕了好几天的问题
在继承和多态性方面,Java通过桥接方法概念支持协变返回类型
但是为什么他们不实现一个像桥接方法这样的概念,来连接那些在超类中没有throws
子句,但在子类中被重写时有一个throws clause
的方法呢。或者他们不能向方法签名中添加throws
来克服这个问题
从this邮报
我的想法是,当从超类重写方法时,检查的异常 子类方法声明的内容不能比超类方法声明的内容更一般
但是为什么我们不能重写一个在超类中没有thorws
但在子类中有它的方法呢
为什么我的建议不能应用于Java机制
谁能给我解释一下吗
# 1 楼答案
JVM验证器会忽略throws子句,因此不需要桥接或其他合成方法
编译器强制执行语言约束,即抛出规范的范围不超过重写的方法。这与收益类型(自1.5起)的协变行为相同。对相关问题的回答说明了为什么会出现这种情况