也许我遗漏了一些东西,但我想如果我这样声明我的类:
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是可迭代的,所以它应该精确地映射到我的构造函数定义。
发布于 2011-02-17 23:47:49
您需要修改构造函数以接受任何扩展Iterable<T>的内容
public Something(Iterable<? extends Iterable<T>> list){}这是因为泛型类型不能从字面上扩展其他泛型类型。无法将List<String>分配给List<CharSequence>。关键字extends允许发生这种类型的赋值。
发布于 2011-02-17 23:49:41
带有泛型的子类型化是非常不直观的。对于你想要做的事情,你需要通配符,这将是非常丑陋的。
在第3节中有一个很好的解释- http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
https://stackoverflow.com/questions/5031074
复制相似问题