Can someone explain what were the reasons generics were introduced in Java?
As far as I understand they were introduced so that you don’t accidentally add the wrong type of object to a collection.
I kind of like the generics for collection but can’t see why they were added for other classes too. I have seen some generic classes that make your head hurt and your eyes bleed.
So what are all the reasons generics were introduced (mainly for non collections)?
TIA!
Essentially type safety and convenience.
Java implements its generics by a mechanism known as type erasure which effectively replaces the generic definition with a non-generic definition at compile time. The reason this was done was to maintain API compatability between 1.4 and 1.5 – the collections API may well have been updated but if you accessed it in a non-generic way in 1.5 it would work the same.
The difference was that if you intended a collection to only contain particular types of objects you could explictly encode that requirement in your APIs and avoid issues such as receiving a list with the wrong type of objects in it – and also the need to have to explictly cast those objects making your code simpler to read and less error prone.
You would use the generics for essentially the same reasons as when they are used with collections – when you need to say that an object is a composite of other objects, but that there may be a range of types possible for that composition and that once bound the addition of these new objects implies a new composite type disimilar to other similar composites. That is to say a list of strings is similar in type to a list of integers but they are no longer compatible with each other.
One example of this is in the
Futurewhere you are waiting for an asynchronous result. TheFutureclass encapsulates the concept of the asynchronous result, but the specific type ofFuturesuch asFuture<String>futher specifies what type of result you can expect – and makes it distinct fromFuture<Integer>.