I’ve been stumbling over Java’s generic types for a while now… I think I finally understand what my problem is:
They should be called specific types, or parametrised collections!
I think the feature is called “Java generics” because when you use a collection, say
List contains elements of parameterised type
<E>, a “generic type”. But the element type in the plain old-fashioned non-parametrised collection
List is also generic! In fact the non-parametrised
List is more generic than the “generic” version (it can contain elements of any sub-class of
Object)! The distinction is that the elements in a
List<String> are all of one specific type (
String), whereas the elements in a
List can be of any general type, and can even be of different types in the same
List collection (leading to problems that “Java generics” was invented to address).
<sarcasm>Gosh, what an epiphany.
If you’re a Java guru this is nothing new, of course. But that took me ages to grasp. I think I wasn’t helped by the terminology. In fact whenever I’m reading Java literature, it helps if I swap “generic” for “specific”. This makes much more sense to me. Actually I already do word substitutions for much of the Java canon. For instance:
- “class Foo is instantiated”
Translation: “a Foo object is created”
- “invoke method X of class Y”
Translation: “send message X to a Y object”,
or even “send class Y the X message”
Probably the Java literature is strictly more “correct” or explicit, but it’d be much more clear and concise if people used the older OOP words for things…