代码之家  ›  专栏  ›  技术社区  ›  aioobe

为什么Java5+API不能利用协变返回类型?

  •  9
  • aioobe  · 技术社区  · 14 年前

    因为Java5允许我们 covariant return types . 为什么javaapi没有利用这一点呢?

    采取 Graphics2D.create() 例如。为什么不重写返回 Graphics2D 反对?在我看来,它在所有情况下都是向后兼容的。

    2 回复  |  直到 14 年前
        1
  •  12
  •   Péter Török    14 年前

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

    Graphics2D

    Java Generics and Collections

        2
  •  4
  •   irreputable    14 年前

    这将破坏二进制兼容性。以前编译的类找不到具有新返回类型的方法。JLS3§13.4.15,§13.4.12