参考:https://segmentfault.com/a/1190000038778953
不理解为什么Enum的泛型要写成<E extends Enum<E>>
,看了这篇解读就明白了。
简单地说就是:有一个基类CustomEnum
,两个子类Color
和WeekDay
。两个子类可以同类比较大小(同为Color
类型的实例之间比较,同为WeekDay
类型的实例之间比较),但不同类(Color
类型和WeekDay
类型)不应该能比较。
为了达成这个目的,所以基类写成了CustomEnum<E extends CustomEnum<E>>
。
基类CustomEnum
public abstract class CustomEnum<E extends CustomEnum<E>> implements Comparable<E> {
protected final String name;
protected final int ordinal;
protected CustomEnum(String name, int ordinal) {
this.name = name;
this.ordinal = ordinal;
}
public final String name() {
return name;
}
public final int ordinal() {
return ordinal;
}
@Override
public int compareTo(E o) {
return ordinal - o.ordinal;
}
}
Color
public class Color extends CustomEnum<Color> {
public Color(String name, int ordinal) {
super(name, ordinal);
}
}
WeekDay
public class WeekDay extends CustomEnum<WeekDay> {
public WeekDay(String name, int ordinal) {
super(name, ordinal);
}
}
测试
public class ParamUpperBound {
public static void main(String[] args) {
Color red = new Color("red", 0);
Color green = new Color("green", 1);
WeekDay monday = new WeekDay("monday", 2);
red.compareTo(green);
monday.compareTo(red);
}
}
不过,我测试下来和参考文章有些出入。
我的基类写成CustomEnum<E extends CustomEnum>
时,已经能限制 不同类之间不同比较大小 了。
原文:https://www.cnblogs.com/musecho/p/15309810.html