插入了枚举值的Java泛型?

时间:2017-01-20 10:47:08

标签: java generics enums quartz-scheduler

我有enum,例如

public enum TimerCommandType {
   DATAPUBLISH,
   CLEARCACHE
}

我希望能够使用Generics生成一个类,所以它看起来像:

TimerCommandClass<DATAPUBLISH> 

在相关时将使用类中的enum值。

这可能吗?

我想拥有它的原因是我目前有许多对Quartz Jobs的调用,如:

 public JobDetailFactoryBean publishingJobDetail() {
    return QuartzSchedulerHelper.createJobDetail(QuartzPublishingJob.class);
}

我希望将它们替换为:

QuartzSchedulerHelper.createJobDetail(TimerCommandClass<DATAPUBLISH>.class);

其中createJobDetail只是:

static JobDetailFactoryBean createJobDetail(Class jobClass) {
    JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
    factoryBean.setJobClass(jobClass);
    return factoryBean;
}

3 个答案:

答案 0 :(得分:4)

DATAPUBLISH是一个值,而不是一个类型,因此它不能用作类型参数。

即使可能,也会在运行时删除类型参数,因此TimerCommandClass<DATAPUBLISH>.class将与TimerCommandClass.class相同。

答案 1 :(得分:0)

TimerCommandClass<DATAPUBLISH>这没有意义,它应该与类进行参数化,所以在我们的例子中,TimerCommandType不是DATAPUBLISH类的实例。要传递实例,可以使用方法或构造函数参数。

答案 2 :(得分:0)

不是真的重复,但我认为你可以在post

中找到答案