実際には互換性を大事にするあまり
J2SE 1.4ぐらいの頃のゴミを今でも引きずっている

まだ若かったC#が互換性を破壊してまでジェネリクスを実装したのに対し
結構長く続いていたJavaは互換性を維持するために型パラメータを消去するという
それはそれで強引なやり方でジェネリクスを実装
これは型が実行時に分からなくなる、性能が悪くなると言ったデメリットがある
今でも改善されてない