我正在Java 1.7中实现链接列表,我不明白这种行为。重要的代码部分是:
public class LListSent<T> implements Iterable<T>{
//...
public T get(int pos) {
//...
}
//...
private class LListSentIterator {
private final LListSent list;
private int currPos;
private LListSentIterator(LListSent list) {
this.list = list;
currPos = 0;
}
//...
@Override
public T next() {
return list.get(currPos++); //exception in this line
}
}
}
我得到的例外是:
incompatible Type: Object cannot be converted to T
where T is a type-variable:
T extends Object declared in class LListSent
虽然left.get返回一个T
对象。为什么会这样?
答案 0 :(得分:1)
您的list
变量的类型为LListSent
,这是原始类型(因此未进行参数化),因此在此实例上调用的get方法将返回Object
而不是{{1} }。
将变量类型更改为T
。
请注意,这将起作用,因为LListSent<T>
是一个内部类,并且可以访问类型变量LListSentIterator
。
更清晰的解决方案是使用类型参数T
对您的LListSentIterator
类进行参数化,这样您的S
变量就会变为类型:list