Earlier quoted context omitted.
Doing it a better way is hard
Is it, though? The most basic implementation, where things are still erased at runtime by the JIT, should be fairly simple, although it will not give the expected perf gains, of course. Either way, CLR and C# did it a long time ago, and in the same time period when Java acquired its type-erased generics.
They care too much about backwards compatibility I think. .NET had done generics this way from the beginning.