如何通过字符串名称获取 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);