2011-03-31 102 views
1

我的代碼如下:泛型相關的問題

private <A extends AbstractDocument> List<A> reorderDocuments(List<A> docs) 
    { 
     List<A> newdoclist = new ArrayList<A>(); 
     for (A o : docs) { 
      if(//some condition) { 
       //TODO::Generic type 
       List<A> tempDocs = new ArrayList<A>(); 
       tempDocs.add(o); 
       tempDocs.addAll(o.getAlikeDocuments()); 
       //sort method called 
      } 
      return newdoclist; 
    } 

已經改變了開始標籤與類型摘要文檔的功能o.getAlikeDocuments()返回列表的類型,但這種方法仍然給我的錯誤就行tempDocs.addAll(o.getAlikeDocuments());說類型列表中的方法addAll(Collection<? extends A>)不適用於參數(List<AbstractDocument>)。 提前感謝幫助。

感謝

Vaibhav的

+1

格式你的代碼{ }按鈕,而不是直接用HTML – 2011-03-31 09:07:02

+1

另外,你應該接受一些答案! – MarcoS 2011-03-31 09:10:34

+0

我接受了你的答案,通過點擊正確的符號,希望這就足夠了:) – vaibhav 2011-03-31 09:48:09

回答

3

你的問題是,AAbstractDocument一個子類,如果你可以不添加任何AbstractDocument除外A

子類,可以把它編譯,知道這不是一個問題是使用類型擦除。

tempDocs.addAll((List) o.getAlikeDocuments()); 
+0

只有當他確定o.getAlikeDocuments()肯定會返回類型A(或子類型)的對象列表。它看起來像這個方法的返回類型是List ,這意味着如果他使用你的解決方案,他最終可以將AbstractDocument對象添加到List 中。 – CodeClimber 2011-03-31 09:37:11

+1

只是注意到你確實說過「如果你知道這不是問題」 – CodeClimber 2011-03-31 09:37:57

+0

是的,這對我來說是合理的,因爲這種方法的返回類型將始終是AbstractDocument,感謝您的幫助!欣賞它! – vaibhav 2011-03-31 09:41:14