aio*_*obe 10 java return-type covariant
从Java 5开始,我们可以使用协变返回类型.为什么Java API不利用这个?
举个Graphics2D.create()例子.为什么不重写它来返回一个Graphics2D对象?在我看来,它在所有情况下都是向后兼容的.
Pét*_*rök 12
一般来说,这确实是为了保持向后兼容性.请注意,兼容性也必须保持在字节码级别,并且更改返回类型会更改字节码.所以一般来说,如果有任何子类可能覆盖了有问题的方法,那么切换到协变返回类型会破坏这些类.
由于Graphics2D它是抽象的,显然意味着是子类,因此上述推理适用.
Java Generics and Collections虽然更多地关注泛型的观点,但在8.4节中讨论了协变覆盖.