通用 class 中私有迭代器的奇怪输入错误
weird typing error with private iterator in generic class
我在 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 return 一个 T
对象。为什么会这样?
您的 list
变量属于 LListSent
类型,它是原始类型(因此未参数化),因此在此实例上调用的 get 方法将 return Object
而不是 T
.
将变量类型更改为 LListSent<T>
。
请注意,这会起作用,因为 LListSentIterator
是一个内部 class 并且可以访问类型变量 T
.
更简洁的解决方案是使用类型参数 S
对 LListSentIterator
class 进行参数化,因此您的 list
变量将变为以下类型:LListSent<S>
我在 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 return 一个 T
对象。为什么会这样?
您的 list
变量属于 LListSent
类型,它是原始类型(因此未参数化),因此在此实例上调用的 get 方法将 return Object
而不是 T
.
将变量类型更改为 LListSent<T>
。
请注意,这会起作用,因为 LListSentIterator
是一个内部 class 并且可以访问类型变量 T
.
更简洁的解决方案是使用类型参数 S
对 LListSentIterator
class 进行参数化,因此您的 list
变量将变为以下类型:LListSent<S>