Java 插入了枚举值的泛型?

Java Generics with Enum value inserted?

我有一个enum,例如

public enum TimerCommandType {
   DATAPUBLISH,
   CLEARCACHE
}

我希望能够使用泛型生成 class,所以它看起来像:

TimerCommandClass<DATAPUBLISH> 

这将在相关时使用 class 中的 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;
}

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

DATAPUBLISH是一个值,不是类型,所以不能作为类型参数。

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