从 Java 5 开始,我们可以协变返回类型。为什么 Java API 不利用这一点呢?
Take Graphics2D.create()
例如。为什么不重写它来返回Graphics2D
目的?在我看来,它在所有情况下都是向后兼容的。
总的来说,这确实是为了保持向后兼容性。请注意,兼容性也必须保持在字节码级别,并且更改返回类型会更改字节码。因此,一般来说,如果有任何子类可能重写了相关方法,则切换到协变返回类型会破坏这些类。
Since Graphics2D
是抽象的,它显然意味着要被子类化,所以上面的推理适用。
Java 泛型和集合尽管更多地关注泛型观点,但在 8.4 节中包含了关于协变重写的讨论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)