Java 泛型类中私有迭代器的奇怪类型错误

Java 泛型类中私有迭代器的奇怪类型错误,java,generics,types,iterator,java-7,Java,Generics,Types,Iterator,Java 7,我正在Java 1.7中实现一个链表,我不理解这种行为。代码的重要部分如下所示: public class LListSent<T> implements Iterable<T>{ //... public T get(int pos) { //... } //... private class LListSentIterator { private final LListSent list; private int

我正在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
      }
  }
}

eve尽管向左。获取并返回一个
T
对象。为什么会发生这种情况?

您的
列表
变量的类型为
LListSent
,这是原始类型(因此未参数化),因此在此实例上调用的get方法将返回
对象
,而不是
T

将变量类型更改为
LListSent

请注意,这将起作用,因为
LListSentIterator
是一个内部类,可以访问类型变量
T


一个更干净的解决方案是使用类型参数
S
参数化您的
llistsentitator
类,这样您的
列表
变量将成为类型:
LListSent

参数化llistsentitator只有在它是静态类IMO时才有必要。@0x539带有
LListSent的“LListSent.LListSentIterator#list”。此
或使“LListSent.LListSentIterator”声明为
私有静态类
,并带有通用约束的
LListSent
字段(这也要求约束类)@BinkanSalaryman没错,我忘了你可以使用
LListSent。这个
。当然更好。
incompatible Type: Object cannot be converted to T
  where T is a type-variable:
    T extends Object declared in class LListSent