如何通过字符串名称获取 class 引用?
How to get class reference by String name?
我正在尝试动态调用以下方法:
JobDetail job = newJob(RunMeJob.class)
.withIdentity("myJob", "group1")
.build();
通过执行以下操作:
private void scheduleJob(final SchedulerJob job, final SchedulerTrigger trigger) {
final String fullyQualifiedName = "com.crm.scheduler.job.RunMeJob";//"com.crm.scheduler.job" + job.getImplementation();
Class<?> cls = Class.forName(fullyQualifiedName, false, null);
JobDetail jobDetail = newJob(cls)
.withIdentity(job.getExternalReference(), trigger.getExternalReference())
.build();
}
但我收到以下错误:
The method newJob(Class< ? extends Job>) in the type JobBuilder is not
applicable for the arguments (Class< capture#3-of ?>)
这里是 RunMeJob
class:
package com.crm.scheduler.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;
import com.crm.scheduler.task.RunMeTask;
@Component
public class RunMeJob implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
new RunMeTask().printMe();
}
}
如何动态指定 class?
基本上,您的想法是正确的,但是您不能将任何旧的 Class
对象传递给 newJob
方法 - 它必须是代表 Class
的实例 Job
,并且必须在其泛型中指定:
Class<? extends Job> cls =
(Class<Job>) Class.forName(fullyQualifiedName, false, null);
我正在尝试动态调用以下方法:
JobDetail job = newJob(RunMeJob.class)
.withIdentity("myJob", "group1")
.build();
通过执行以下操作:
private void scheduleJob(final SchedulerJob job, final SchedulerTrigger trigger) {
final String fullyQualifiedName = "com.crm.scheduler.job.RunMeJob";//"com.crm.scheduler.job" + job.getImplementation();
Class<?> cls = Class.forName(fullyQualifiedName, false, null);
JobDetail jobDetail = newJob(cls)
.withIdentity(job.getExternalReference(), trigger.getExternalReference())
.build();
}
但我收到以下错误:
The method newJob(Class< ? extends Job>) in the type JobBuilder is not applicable for the arguments (Class< capture#3-of ?>)
这里是 RunMeJob
class:
package com.crm.scheduler.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;
import com.crm.scheduler.task.RunMeTask;
@Component
public class RunMeJob implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
new RunMeTask().printMe();
}
}
如何动态指定 class?
基本上,您的想法是正确的,但是您不能将任何旧的 Class
对象传递给 newJob
方法 - 它必须是代表 Class
的实例 Job
,并且必须在其泛型中指定:
Class<? extends Job> cls =
(Class<Job>) Class.forName(fullyQualifiedName, false, null);