2011-02-17 173 views
2

也許我失去了一些東西,但我想,如果我聲明我的課是這樣的:Java的可迭代<Iterable<T>>到ArrayList的<ArrayList<T>>

public class Something<T> implements Iterable<Iterable<T>> { 
    public Something(Iterable<Iterable<T>> input) { 
    ... 

我應該能夠實例化它是這樣:

ArrayList<ArrayList<String>> l = new ArrayList<ArrayList<String>>(); 

Something<String> s = Something<String>(l); 

不幸的是,這給我一個錯誤。我認爲ArrayLists是Iterable,因此應該完全映射到我的構造函數定義。

回答

7

您需要修改你的構造函數接受任何擴展Iterable<T>

public Something(Iterable<? extends Iterable<T>> list){} 

這樣做的原因是因爲泛型類型不能隨便擴展其他泛型類型。 A List<String>不能被分配到List<CharSequence>。關鍵字extends允許進行這種類型的分配。

+0

謝謝,但在這裏,現在我得到警告: `公共類的東西實現了Iterable > { \t \t私人可迭代>輸入; \t \t 公共東西(可迭代<?延伸可迭代>輸入){ \t \t this.input =(可迭代>)輸入; \t}` – Pass 2011-02-17 16:06:07

相關問題