java 泛型 `<E extends Enum<E>>`

public abstract class Enum<E extends Enum<E>>{
    
    
	public final int compareTo( E o) {
    
     ... }
}

Enum的源码中<E extends Enum<E>>这种格式的泛型是指:
该类只能被子类实例化,子类会继承其方法.就是类型EEnum的子类.而该类的compareTo方法参数就是类型E,既子类.

package com;

enum DAY {
    
     MON, TUE, WED, THU, FRI, SAT, SUN }

public class App2 {
    
    
    public static void main(String[] args) {
    
    
        DAY day = DAY.MON;
        System.out.println(day);
    }
}

使用enum关键字相当于创建了DAY类,并且DAY类继承了Enum
编译器编译结果如下:

enum DAY {
    
     MON, TUE, WED, THU, FRI, SAT, SUN }

public final class DAY extends Enum<DAY> {
    
    
    public static final DAY MON;
    ...
    static {
    
    
        MON = new DAY("MON", 0);
    }
}

DAY类继承所有Enum<DAY>的方法比如compareTo方法,而compareTo方法需要用DAY作为参数,因此用了EnumE类型形参.

参考:
http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ106

猜你喜欢

转载自blog.csdn.net/claroja/article/details/114154507
今日推荐