小编典典

Java 5+ API为什么不利用协变返回类型?

java

从Java 5开始,我们被允许具有协变返回类型。Java API为什么不利用此优势?

举个Graphics2D.create()例子。为什么不重写以返回Graphics2D对象?在我看来,它将在所有情况下都向后兼容。


阅读 219

收藏
2020-11-16

共1个答案

小编典典

通常,这确实是为了保持向后兼容性。请注意,兼容性也必须保持在字节码级别,并且更改返回类型也会更改字节码。因此,通常来说,如果有任何子类可能覆盖了所讨论的方法,那么切换到协变返回类型将破坏这些类。

由于Graphics2D是抽象的,因此显然要进行子类化,因此适用上述推理。

Java Generics and
Collections
尽管更着重于泛型观点,但在8.4节中讨论了协变量重写。

2020-11-16