黑马程序员技术交流社区

标题: 关于 Enum<Eextends Enum<E>> 的解读,自己解决了,有兴趣的看看 [打印本页]

作者: 张晋瑜    时间: 2013-2-25 20:36
标题: 关于 Enum<Eextends Enum<E>> 的解读,自己解决了,有兴趣的看看
本帖最后由 张晋瑜 于 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/





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2