A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张晋瑜 于 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/

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马