1
我在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
对象。为什么会发生?
参数化LListSentIterator只会是必要的,如果它是一个静态类IMO。 – 0x539
@ 0x539或者将LListSent.LListSentIterator#list替换为LListSent.this,或者将LListSent.LListSentIterator声明为带有通用约束的LListSent字段的private static class该类也被约束)。 –
@BinkanSalaryman这是真的,我忘记了你可以使用'LListSent.this'。当然,这更好。 – 0x539