Java Iterable <Iterable <T >>到ArrayList <ArrayList <T >>

Pas*_*ass 2 java generics iterator

也许我错过了一些东西,但我想如果我这样宣布我的课程:

public class Something<T> implements Iterable<Iterable<T>> {
  public Something(Iterable<Iterable<T>> input) {
  ...
Run Code Online (Sandbox Code Playgroud)

我应该能够实例化它:

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

Something<String> s = Something<String>(l);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这给我一个错误.我认为ArrayLists是Iterable所以应该完全映射到我的构造函数定义.

Jer*_*emy 7

您需要修改构造函数以接受任何扩展的内容 Iterable<T>

public Something(Iterable<? extends Iterable<T>> list){}
Run Code Online (Sandbox Code Playgroud)

原因是泛型类型无法从字面上扩展其他泛型类型.A List<String>不能分配给List<CharSequence>.关键字extends允许发生此类分配.