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
相同。
我有一个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
相同。