枚举作为类中的泛型类型但使用方法需要显式强制转换

时间:2016-01-29 16:13:04

标签: java generics enums

我使用枚举作为我班级的通用类型参数。问题是我没有显式转换就无法使用它的方法(这必须是由于运行时类型擦除)。 请考虑以下事项:

public enum TaskDetail {
    CAR_WASH(100, 2);

    private int serviceFees;
    //Something else.
    public int getServiceFees() {
        return serviceFees;
    }
}

我在课堂上使用它作为类型:

public class Task<E extends Enum<TaskDetail>> implements Runnable {
    private E taskDetail;

    public Task(E taskDetail) {
        this.setTaskDetail(taskDetail);
    }

    @Override
    public void run() {
        //do something with taskDetail:
        //not able to access methods without explicit cast. 
    }

    public static void main(String[] args) {
        Task<TaskDetail> t = new Task<TaskDetail>(TaskDetail.CAR_PAINT);
        t.taskDetail.getServiceFees(); //This is fine.
    }
}

为什么我无法做到这一点?我可能会误认为正常的类类型参数,这是可能的。

1 个答案:

答案 0 :(得分:4)

你在Task类中不需要泛型类型,这很好

public class Task implements Runnable {
    private TaskDetail taskDetail;

    public Task(TaskDetail taskDetail) {
        this.setTaskDetail(taskDetail);
    }

    @Override
    public void run() {

    }

    public static void main(String[] args) {
        Task t = new Task(TaskDetail.CAR_WASH);
        t.taskDetail.getServiceFees(); //This is fine.
    }
}