“可迭代<元素>不能转换为List<元素>” - “列表”不是一种“可迭代”吗?

2022-09-04 04:59:24

我调用了一个返回.getElementsIterable<Element>

我这样做了:

List<Element> elements = (List<Element>) getElements();

这将生成错误:

java.lang.ClassCastException: com.utesy.Element$3 
cannot be cast to java.util.List

我以为列表是一种可迭代的类型


答案 1

是的,extends ,但这并不意味着您可以从 any 强制转换为 - 仅当值实际引用某种类型的实例时。完全有可能在不实现接口的其余部分的情况下实现...在这种情况下,您期望发生什么?List<T>Iterable<T>Iterable<T>List<T>List<T>Iterable<T>List<T>

用更简单的术语来说,让我们改为 和 。 扩展 ,所以你可以尝试从 到 ...但是,仅当引用实际引用 a(或为 null)时,强制转换才会在执行时成功。Iterable<T>ObjectList<T>StringStringObjectObjectStringString


答案 2

您可以使用以下命令将可迭代转换为列表

List<Element> elements = Lists.newArrayList( getElements() );