//表示的是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都可以继承和实现其它类,所以同类枚举类型也和普通类一样,可以继承和实现其它类。 |