请参阅Ola Bini 的博客。众所周知,Java 具有使用点协方差,通过在您认为方差合适的地方添加小问号来实现。Scala 具有定义点协方差,由类设计器实现。他说:
泛型是一种复杂的语言特性。当添加到已经具有子类型的现有语言中时,它变得更加复杂。这两个功能在一般情况下不能很好地结合在一起,在将它们添加到语言时必须非常小心。如果虚拟机只需要提供一种语言并且该语言使用相同的泛型,那么将它们添加到虚拟机很简单。但是泛型还没有完成。尚未完全了解如何正确处理,并且正在发生新的突破(Scala 就是一个很好的例子)。在这一点上,泛型不能被认为是“做对了”。不只有一种类型的泛型——它们在实现策略、特性和极端情况方面有所不同。
...
这一切的意思是,如果您想向 JVM 添加具体化的泛型,您应该非常确定该实现可以包含所有想要在自己的泛型版本中进行创新的静态语言,以及所有想要创新的动态语言。创建一个良好的实现和与 Java 库的良好接口工具。因为如果您添加不满足这些标准的具体化泛型,您将扼杀创新并使将 JVM 用作多语言 VM 变得更加困难。
即,如果我们在 JVM 中具体化了泛型,那么这些具体化的泛型很可能不适合我们真正喜欢的 Scala 特性,并且我们会遇到一些次优的问题。