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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴光新 黑马帝   /  2013-8-2 18:52  /  2517 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Jiewin 于 2013-8-2 18:55 编辑

Enum<E extends Enum<E>>

这是泛型限定吗?
还是在说明所有的枚举类都有系统默认继承Enum类?
如果我们定义的枚举类都是默认继承Enum,那么我们定义的所有的枚举类就不能继承其他类了吗?

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
the declaration " Enum<E extends Enum<E>> " can be decyphered as: Enum is a generic type that can only be instantiated for its subtypes, and those subtypes will inherit some useful methods, some of which take subtype specific arguments (or otherwise depend on the subtype).  

搜索后得到的解答,来自stack over flow上面一位哥们的提问解答中的文章讨论此问题。原文地址:http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ106
回复 使用道具 举报
//表示的是E类型必须是一个继承自MyEnum类的类型(也就是说是一个MyEnum的子类型和自己本身类型)

class MyEnum<E extends MyEnum<E>> extends ChinesePeople implements MyComparable<E>
{
        public int myCompare(E o)
        {
                return 0;
        }
}

interface MyComparable<T>
{
        int myCompare(T o);
}

class ChinesePeople
{
        
}

class FirstEnum extends MyEnum<FirstEnum>
{
        
}

class SecondEnum extends MyEnum<SecondEnum>
{
        
}

从上面列子可以看出来 MyEnum 即继承了类 ChinesePeople 又实现了MyComparable接口
这上面的这个列子定义的  泛型模式 与 枚举类型的公共基本类 Enum<E extends Enum<E>> 中的泛型模式是一样的, 表示泛型 E 的类型 继承自 MyEnum类型 所以E类型的范围不能超过MyEnum类型(只能为 MyEnum 的 子类型,或者其本身类型),而  extends关键字后面的 MyEnum类 的泛型又定义为 E 类型 ( MyEnum<E>  E表明MyEnum类型中的泛型类型)  如果这里的E表示的是 MyEnum 的子类型的话, 那么就表明 , MyEnum类中的泛型,为  MyEnum类中泛型的子类型 ,就相当于E 类型是 E 类型的子类型,这样就矛盾了,所以E不能是它的子类型了,必须是自己本身的类型。表名E类型是E类型,这样是符合逻辑的。所以 FirstEnum继承了MyEnum所以放行必须为它自己本身(FirstEnum)。为其它类型都会报错。 接下来我们再来看枚举类型,枚举类是一个特殊的类枚举类中的 每一属性都是枚举类的一个实例,所以 可以把这里的E看成是枚举类中属性的 类型, 而枚举类中的属性类型就是自己定的枚举类型。就是代表自己本身的类型。
public enum EnumDemo
{      
  // RED,BLUE,GREEN的类型都为 枚举类型EnumDemo
        RED, BLUE, GREEN;

}

由于上面的MyEnum都可以继承和实现其它类,所以同类枚举类型也和普通类一样,可以继承和实现其它类。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马