2011-02-17 130 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

相关问题