任何机构都能解释为什么<T extends Job>
这里使用了类型安全的泛型吗?
此代码由我的项目团队成员编写,他不再是团队的一员。对我来说这看起来很奇怪Code
。我只是想重写它并在另一个代码中使用它。没有深刻的理解,我将无法改变这一点。
private <T extends Job> void addNewTask (Class<T> prm_objClassToSchedule, String prm_sJobName, String prm_sTriggerName, String prm_sCronExpression) throws ParseException, SchedulerException {
CronTrigger v_objTrigger;
JobDetail v_objJob;
Scheduler v_objScheduler;
}
答案 0 :(得分:3)
正如在其他答案中所说T
应该扩展Job
,所以方法可以清楚地写成:
private <T extends Job> void addNewTask (Class<T extends Job> prm_objClassToSchedule, String prm_sJobName, String prm_sTriggerName, String prm_sCronExpression) throws ParseException, SchedulerException {
CronTrigger v_objTrigger;
JobDetail v_objJob;
Scheduler v_objScheduler;
java编译器至少需要提及相同泛型类型T
的确切类型才能编译它,无论这个提及是在参数中还是在返回类型中。 T
的所有其他提及将被解释为同一类。
答案 1 :(得分:1)
没有使用此方法的任何上下文。我想说第一个参数是期望从Job类扩展的Class类型。
答案 2 :(得分:1)
它声明第一个参数是Class<T>
wheref T extends Job
。
class Job {
public void go() {
}
}
class X extends Job {
}
private <T extends Job> void addNewTask(Class<T> c) throws InstantiationException, IllegalAccessException {
T t = c.newInstance();
t.go();
}
public void test() throws InstantiationException, IllegalAccessException {
Object o = new Object();
Job j = new Job();
X x = new X();
// Not allowed because `o` is not a `Job`
//addNewTask(o.getClass());
// Both good.
addNewTask(j.getClass());
addNewTask(x.getClass());
}