我已经看过几篇关于此的帖子,但是不能在Quartz中使用新的JobBuilder方法。
我正在尝试使用存储类名的字符串动态创建JobDetail。但是我收到以下编译器错误:
The method newJob(Class<? extends Job>) in the type JobBuilder is not applicable
for the arguments (Class<capture#6-of ?>)
这是代码:
String s = "ClassName";
Class<?> jobClass = null;
try {
jobClass = Class.forName (s);
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new MsgException ( "Requested Job Class not found" );
}
JobDetail jobDetail = newJob(jobClass).
withIdentity(jobKey).
withDescription(description).
storeDurably().
usingJobData(dataMap).
build();
答案 0 :(得分:0)
您是否看过错误消息? newJob
采用Class<? extends Job>
类型的参数,但您传递的是Class<?>
类型的参数。作为快速修复,您可以尝试将其更改为
newJob((Class<? extends Job>)jobClass)
从长远来看,你可能想要进行实际检查以确保它是Job的子类,否则你会在Quartz内部遇到神秘的运行时错误。
答案 1 :(得分:0)
我认为newJob构造函数需要编译时引用,而Class.forName()等方法是运行时引用。中间解决方案是使用类似的东西:
private void makeNewJob(Class<? extends Job> jobClass, String identity,
String environment)
{
JobDetail job = newJob(jobClass).withIdentity(identity, environment)
.build();
// additional code
}
并致电:
makeNewJob(MyJob.class, "MyJob", "Production");