I\'ve occasionally heard that with generics, Java didn\'t get it right. (nearest reference, here)
Pardon my inexperience, but what would have made them better?
Ignoring the whole type erasure mess, generics as specified just don't work.
This compiles:
List x = Collections.emptyList();
But this is a syntax error:
foo(Collections.emptyList());
Where foo is defined as:
void foo(List x) { /* method body not important */ }
So whether an expression type checks depends on whether it is being assigned to a local variable or an actual parameter of a method call. How crazy is that?