2013-04-02 58 views
0

我試圖以編程方式初始化類並將其添加到列表中。我不知道如何輸入workflowClass以便它extends BaseWorkflow因此列表將接受它。目前它說我預計? extends BaseWorkflow時不能添加Object如何以編程方式強制類型轉換初始化類

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); 
+1

這可能幫助:http://stackoverflow.com/questions/356583 –

回答

3

您將不能添加任何東西到List<? extends BaseWorkflow>。該清單應宣佈爲List<BaseWorkflow>。事實上,List<? extends BaseWorkflow>意味着:列出了某些未知類型,它是或擴展了BaseWorkflow。由於該類型是未知的,因此向該列表中添加任何內容(非null)都會破壞其類型安全性。

然後一個簡單的投會做:

workflowList.add((BaseWorkflow) workflowClass); 
+0

I類雖然不是'BaseWorkflow',我需要'BaseWorkflow'的類型化版本,它可以通過'workflow.getClassName()'獲得' – Webnet

+0

一個對象有一個類型,並且將它添加到列表中不會改變它。假設類名是'Foo',添加對象的類型將是'Foo'。汽車是一輛汽車。將汽車添加到車輛列表中並不會將其更改爲其他內容。它仍然是一輛汽車。 –

+0

但是如果我理解正確(我可能不這樣做),如果它被投射到'Vehicle'而不是'Car',那麼這是不正確的? – Webnet

1

儘量明確地投對象:

workflowList.add((BaseWorkflow) workflowClass) 
相關問題