I thought I understood Java generics pretty well, but then I came across the following in java.lang.Enum:
class Enum>
>
The following is a modified version of the explanation from the book Java Generics and Collections:
We have an Enum
declared
enum Season { WINTER, SPRING, SUMMER, FALL }
which will be expanded to a class
final class Season extends ...
where ...
is to be the somehow-parameterised base class for Enums. Let's work
out what that has to be. Well, one of the requirements for Season
is that it should implement Comparable
. So we're going to need
Season extends ... implements Comparable
What could you use for ...
that would allow this to work? Given that it has to be a parameterisation of Enum
, the only choice is Enum
, so that you can have:
Season extends Enum
Enum implements Comparable
So Enum
is parameterised on types like Season
. Abstract from Season
and
you get that the parameter of Enum
is any type that satisfies
E extends Enum
Maurice Naftalin (co-author, Java Generics and Collections)