我使用枚举作为我班级的通用类型参数。问题是我没有显式转换就无法使用它的方法(这必须是由于运行时类型擦除)。 请考虑以下事项:
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.
}
}
为什么我无法做到这一点?我可能会误认为正常的类类型参数,这是可能的。
答案 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.
}
}