Why do some claim that Java’s implementation of generics is bad?

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 a byte[] 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!

Leave a Comment