当前位置: 首页 > 面试题库 >

为什么没有清单>”在Java中?

宿文栋
2023-03-14
问题内容

在Java中,为什么以下代码行不起作用?

List<List<String>> myList = new ArrayList<ArrayList<String>>();

如果我将其更改为

List<ArrayList<String>> myList = new ArrayList<ArrayList<String>>();

起初,我以为您可能没有接口列表,但是我可以创建一个List<Runnable>很好的接口。

有想法吗?


问题答案:

泛型类型比较古怪。

List表示List或任何子类型,但<List>仅表示List。如果您想要一个子类型,您需要<? extends List>

我怀疑你可以用

List<List<String>> myList = new ArrayList<List<String>>();

无法执行此操作的原因是,您可以使用对引用的引用,并且必须谨慎使用额外的间接级别。

// with one level of indirection its simple.
ArrayList alist = new ArrayList();
List list = aList; // all good
list = new LinkedList(); // alist is still good.

使用泛型,您可以有两个间接级别,这会给您带来问题,因此它们更容易避免这些问题。

// with two levels of indirection
List<ArrayList> alist = new ArrayList<ArrayList>();
List<List> list = (List) alist; // gives you a warning.
list.add(new LinkedList()); // adding a LinkedList into a list of ArrayList!!
System.out.println(alist.get(0)); // runtime error

版画

Exception in thread "main" java.lang.ClassCastException: java.util.LinkedList
     cannot be cast to java.util.ArrayList


 类似资料:
  • 问题内容: 在Python IDLE 3.5.0 Shell中工作。根据我对内置“过滤器”功能的了解,它会根据您传递给它的内容返回列表,元组或字符串。因此,为什么下面的第一个分配有效,而第二个却不起作用(“ 只是交互式Python提示) 问题答案: 看看python文档(从此处开始): 从这些 iterable 元素构造一个迭代器,为其 功能 返回true。 因此,为了获取列表,您必须使用列表类:

  • 问题内容: 我知道每次键入字符串文字时,字符串池中都会引用相同的String对象。 但是,为什么String API不包含,所以我可以使用引用? 至少,这将节省编译时间,因为编译器将知道引用现有的String,而不必检查是否已创建它以进行重用,对吗?我个人认为,字符串文字(尤其是很小的文字)在许多情况下是一种“代码异味”。 那么是否没有String.Empty背后的宏伟设计原因,还是语言创建者根本

  • 问题内容: 在Java中,有和接口。两者都属于Java的标准框架,并提供了一种访问元素的分类方法。 但是,据我了解没有。你可以用来对列表进行排序。 知道为什么要这样设计吗? 问题答案: 列表迭代器首先确保你以列表的内部顺序(也称为插入顺序)获取列表的元素。更具体地说,它是按照插入元素的顺序或操作列表的方式进行的。排序可以看作是对数据结构的一种操作,有几种方法可以对列表进行排序。 我将按照自己的见解

  • 问题内容: 我知道在该主题上也有类似的帖子,但是它们并没有完全解决我的问题。当您这样做时: (显然)大多数时间都会打印,因为以某种方式缓存了[-128,127]范围内的整数。但: 会回来的。我知道我正在请求一个Integer的新实例,但是由于装箱的原语在Java中是不可变的,并且已经有了执行“正确的事情”的机制(如第一种情况所示),为什么会发生这种情况? 如果Integer的所有实例(具有10)都

  • 问题内容: 恐怕这是一个愚蠢的问题。 有谁能告诉我为什么没有对立的东西? 除了“因为根本就没有”以外,还有其他原因吗? 我应该创建自己的一个吗?还是我想念其他东西? 更新资料 在哪里使用?我正在编写一个使用大量消费者和供应商的图书馆。我成功地写了一行,并且遇到一种情况,期望消费者接受来自方法结果的布尔值。说什么 问题答案: 并且需要避免开销自动装箱每个值。处理原始图元更有效。但是,对于布尔值和字节

  • 问题内容: 我正在探索,惊讶地发现那没有。 我有两个问题。 主要问题 我想知道为什么删除了? 是否存在性能问题或其他问题? 次要问题 我解决我的问题写我的: 这样可以/有更好的方法吗? 问题答案: