Why do some claim that Java's implementation of generics is bad?
Solution 1:
Bad:
- Type information is lost at compile time, so at execution time you can't tell what type it's "meant" to be
- Can't be used for value types (this is a biggie - in .NET a
List<byte>
really is backed by abyte[]
for example, and no boxing is required) - Syntax for calling generic methods sucks (IMO)
- Syntax for constraints can get confusing
- Wildcarding is generally confusing
- Various restrictions due to the above - casting etc
Good:
- Wildcarding allows covariance/contravariance to be specified at calling side, which is very neat in many situations
- It's better than nothing!
Solution 2:
The biggest problem is that Java generics are a compile-time only thing, and you can subvert it at run-time. C# is praised because it does more run-time checking. There is some really good discussion in this post, and it links to other discussions.