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 である、または BaseWorkflow を拡張する未知の型のリスト。型が不明であるため、このリストに何か (null 以外) を追加すると、型の安全性が損なわれます。

そして、単純なキャストが行います:

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

オブジェクトを明示的にキャストしてみてください:

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