我正在尝试以编程方式初始化一个类并将其添加到列表中。我不知道如何键入workflowClass
以便它成为extends BaseWorkflow
,因此列表将接受它。目前,它说我期望Object
时不能添加? extends BaseWorkflow
。
private static List<? extends BaseWorkflow> workflowList = new ArrayList<BaseWorkflow>();
/**
* Initialize the production line
*/
public static void init() {
//load active workflows into memory
WorkflowService workflowService = (WorkflowService) ApplicationContextProvider.getApplicationContext().getBean("workflowService");
for (Workflow workflow: workflowService.findActive()) {
try {
Class<?> clazz = Class.forName(workflow.getClassName());
Object workflowClass = clazz.newInstance();
workflowList.add(workflowClass);
最佳答案
您将无法向List<? extends BaseWorkflow>
添加任何内容。该列表应声明为List<BaseWorkflow>
。实际上,List<? extends BaseWorkflow>
的含义是:一个未知类型的列表,它是BaseWorkflow或扩展了BaseWorkflow。由于类型是未知的,因此向此列表添加任何内容(空值除外)将破坏其类型安全性。
然后一个简单的强制转换就可以了:
workflowList.add((BaseWorkflow) workflowClass);