0

我正在尝试以编程方式初始化一个类并将其添加到列表中。我不知道如何输入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);
4

2 回答 2

3

您将无法向List<? extends BaseWorkflow>. 该列表应声明为List<BaseWorkflow>. 实际上,List<? extends BaseWorkflow>意味着:一些未知类型的列表,它是或扩展 BaseWorkflow。由于类型是未知的,因此向该列表添加任何内容(除 null 外)都会破坏其类型安全性。

然后一个简单的演员就可以了:

workflowList.add((BaseWorkflow) workflowClass);
于 2013-04-02T17:44:25.827 回答
1

尝试显式转换 Object:

workflowList.add((BaseWorkflow) workflowClass)
于 2013-04-02T17:45:15.183 回答