我有以下情景:
public abstract class BaseTask{...}
public class TaskA extends BaseTask {....}
public class TaskB extends BaseTask {....}
public interface TaskService<T extends BaseTask>{
void process(T task);
}
@Service @Qualifier("taskServiceA")
public class TaskServiceA<TaskA> implements TaskService<TaskA>{
}
@Service @Qualifier("taskServiceB")
public class TaskServiceB<TaskB> implements TaskService<TaskB>{
}
public class ProcessingService{
@Autowired @Qualifier("taskServiceA")
private TaskService<TaskA> taskAService;
@Autowired @Qualifier("taskServiceB")
private TaskService<TaskB> taskBService;
public void process(Order o){
BaseTask task = o.getTask();
getTaskService(o).start(task);
}
private <T extends BaseTask> TaskService<T> getTaskService(Order o){
if("atype".equals(o.type)){
return (TaskService<T>) taskAService;
} else if("btype".equals(o.type)){
return (TaskService<T>) taskBService;
}
}
}
更新:我已经重新措辞了问题,因为我得到的答案不是我想要的。
我的问题与getTaskService
方法有关。
为什么我需要像这样强制转换返回值:
return (TaskService) taskAService;
是否有另一种实现
getTaskService()
方法的方式,而不必进行强制转换?
如果有人能提供一些解释或更好的getTaskService
方法实现,我将非常感激。
String
中使用==
,应该使用switch
语句或.equals()
。 - Maurice Perry