public abstract class Enum<E extends Enum<E>>{
public final int compareTo( E o) { ... }
}
Enum的源码中<E extends Enum<E>>
这种格式的泛型是指:
该类只能被子类实例化,子类会继承其方法.就是类型E
是Enum
的子类.而该类的compareTo
方法参数就是类型E
,既子类.
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);
}
}
使用enum
关键字相当于创建了DAY
类,并且DAY
类继承了Enum
编译器编译结果如下:
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);
}
}
而DAY
类继承所有Enum<DAY>
的方法比如compareTo
方法,而compareTo
方法需要用DAY
作为参数,因此用了Enum
的E
类型形参.
参考:
http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ106