sno*_*opy 11 java iterable list classcastexception
我打电话给一个getElements返回的方法Iterable<Element>.
我这样做了:
List<Element> elements = (List<Element>) getElements();
这会生成错误:
java.lang.ClassCastException: com.utesy.Element$3 
cannot be cast to java.util.List
我以为List是一种Iterable?
Jon*_*eet 26
是的,List<T>扩展Iterable<T>,但这并不意味着您可以从任何转换 Iterable<T>为List<T>- 仅当值实际引用某种类型的实例时List<T>.完全可以在Iterable<T>不实现List<T>接口的其余部分的情况下实现......在这种情况下,您期望会发生什么?
说得简单一点,让我们改变Iterable<T>对Object和List<T>对String.Stringextends Object,所以你可以尝试转换Object为String...但是只有在引用实际引用a String(或为null)时,转换才会在执行时成功.
dev*_*tor 26
您可以将Iterable转换为List
List<Element> elements = Lists.newArrayList( getElements() );
Eri*_*son 18
List<Element>是一种类型Iterable<Element>,但这并不意味着所有Iterable<Element>对象都是List<Element>对象.你可以投出List<Element>作为Iterable<Element>,而不是周围的其他方式.
苹果是一种水果,但这并不意味着所有的水果都是苹果.你可以将苹果作为水果,但不是相反.
小智 5
为什么不:
    Iterable<Element> i = ...; //is what you have
    List<Element> myList = new LinkedList<Element>();
    for (Element e:i) {
        myList.add(e);
    }
?不需要google lib.
| 归档时间: | 
 | 
| 查看次数: | 38472 次 | 
| 最近记录: |