如何输入以编程方式初始化的类

时间:2013-04-02 17:42:02

标签: java

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

2 个答案:

答案 0 :(得分:3)

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

然后一个简单的演员会做:

workflowList.add((BaseWorkflow) workflowClass);

答案 1 :(得分:1)

尝试显式转换Object:

workflowList.add((BaseWorkflow) workflowClass)