本帖最后由 张晋瑜 于 2013-2-25 20:37 编辑
就是昨天发的一个求助帖子,今天看下没人帮忙只有自己解决了,今天找了点资料大概明白了怎么回事
先看下jdk中:
public abstract class Enum<E extends Enum<E>>
implements Comparable<E>, Serializable {
private final String name;
private final int ordinal;
public final String name() {
return name;
}
public final int ordinal() {
return ordinal;
}
protected Enum(String name, int ordinal) {
this.name = name;
this.ordinal = ordinal;
}
…… ……
…… ……
}
他是个抽象类
看了几篇文章后总算是有些明白了:
Enum接受一个类型参数
Enum是一个抽象类,任何Enum的子类都必须为Enum提供一个类型参数
这个类型参数必须是Enum的子类
为什么java.lang.Enum被声明为Enum<Eextends Enum<E>>?
类型参数E被使用为getDeclaringClass()的返回值
类型参数E作为compareTo()的参数
OpType opType = OpType.ADD;
ProductStatus status =ProductStatus.NORMAl;
opType.compareTo(status); // 这样子编译时就会报错
再比如:
Rank r = Rank.ACE;
Suit s = Suit.HEART;
r.compareTo(s); // syntax error, argument must be of type Rank
Rank z = Enum.valueOf(Rank.class, "TWO");
还有不明白的可以先看下这篇博客:Groking Enum (aka Enum<E extends Enum<E>>)
http://madbean.com/2004/mb2004-3/
|