OlaBiniのブログを参照してください。ご存知のとおり、Javaには使用サイトの共分散があり、分散が適切であると思われる場合は、疑問符をほとんど付けずに実装されます。Scalaには、クラス設計者によって実装された定義サイトの共分散があります。彼は言う:
ジェネリックスは複雑な言語機能です。すでにサブタイピングされている既存の言語に追加すると、さらに複雑になります。これらの2つの機能は、一般的なケースではうまく機能しないため、言語に追加する場合は細心の注意を払う必要があります。それらを仮想マシンに追加するのは、そのマシンが1つの言語のみを提供する必要があり、その言語が同じジェネリックを使用している場合は簡単です。しかし、ジェネリックは行われていません。正しく処理する方法が完全には理解されておらず、新しいブレークスルーが発生しています(Scalaはこの良い例です)。現時点では、ジェネリックは「正しく行われた」とは見なされません。ジェネリックスのタイプは1つだけではありません。それらは、実装戦略、機能、およびコーナーケースが異なります。
..。
これが意味することは、JVMに洗練されたジェネリックを追加したい場合、その実装が独自のバージョンのジェネリックで革新を行いたいすべての静的言語と、優れた実装とJavaライブラリとの優れたインターフェース機能を作成します。これらの基準を満たさない洗練されたジェネリックを追加すると、イノベーションが抑制され、JVMを多言語VMとして使用することがはるかに困難になるためです。
つまり、JVMでジェネリックを具体化した場合、それらのジェネリックを具体化したものは、Scalaで本当に気に入っている機能に適していない可能性が高く、最適ではないものに悩まされることになります。