我正在尝试迭代一个集合,我想将下一个元素保存在一个临时变量中,但是它给了我一个不兼容类型的编译错误。
Iterator it = this.iterator();
E next = it.next();
next()返回一个泛型类型E,next类型为E.为什么它会给我错误?
答案 0 :(得分:5)
您使用Iterator
作为原始类型,因为您尚未提供类型参数。使用原始类型时,任何相关的泛型类型都将成为erasure。换句话说,在method参数,返回类型等中使用类类型变量会变为Object
或上限。
你可能想要
Iterator<E> it = this.iterator();
E next = it.next();
如果this.iterator()
的返回类型为Iterator<E>
。
答案 1 :(得分:1)
您正在使用原始类型迭代器,将它与Generics一起使用,然后它将允许编译
Iterator<E> it = this.iterator();
E next = it.next();
答案 2 :(得分:0)
使用泛型或者对象进行类型转换。