public abstract class Enum<E extends Enum<E>>{
public final int compareTo( E o) {
... }
}
Enum source in <E extends Enum<E>>
a generic format means:
This class can be subclassed instantiated subclass inherits its methods is the types E
is Enum
a subclass of the class. compareTo
The method parameter is the type E
, both subclasses.
package com;
enum DAY {
MON, TUE, WED, THU, FRI, SAT, SUN }
public class App2 {
public static void main(String[] args) {
DAY day = DAY.MON;
System.out.println(day);
}
}
Using enum
keywords is equivalent to creating a DAY
class, and the DAY
class inherits the Enum
compiler compilation results are as follows:
enum DAY {
MON, TUE, WED, THU, FRI, SAT, SUN }
public final class DAY extends Enum<DAY> {
public static final DAY MON;
...
static {
MON = new DAY("MON", 0);
}
}
The DAY
class inherits all Enum<DAY>
methods such as compareTo
methods, and compareTo
methods need to be used DAY
as parameters, so Enum
the E
type parameters are used.
Reference:
http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ106