首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到ArrayList<ArrayList<T>>的Java Iterable<Iterable<T>>

到ArrayList<ArrayList<T>>的Java Iterable<Iterable<T>>
EN

Stack Overflow用户
提问于 2011-02-17 23:37:24
回答 2查看 3.9K关注 0票数 2

也许我遗漏了一些东西,但我想如果我这样声明我的类:

代码语言:javascript
复制
public class Something<T> implements Iterable<Iterable<T>> {
  public Something(Iterable<Iterable<T>> input) {
  ...

我应该能够像这样实例化它:

代码语言:javascript
复制
ArrayList<ArrayList<String>> l = new ArrayList<ArrayList<String>>();

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

不幸的是,这给了我一个错误。我认为ArrayLists是可迭代的,所以它应该精确地映射到我的构造函数定义。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-17 23:47:49

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

代码语言:javascript
复制
public Something(Iterable<? extends Iterable<T>> list){}

这是因为泛型类型不能从字面上扩展其他泛型类型。无法将List<String>分配给List<CharSequence>。关键字extends允许发生这种类型的赋值。

票数 7
EN

Stack Overflow用户

发布于 2011-02-17 23:49:41

带有泛型的子类型化是非常不直观的。对于你想要做的事情,你需要通配符,这将是非常丑陋的。

在第3节中有一个很好的解释- http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5031074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档