在泛型类中使用私有迭代器的奇怪输入错误

时间:2015-10-07 08:15:13

标签: 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 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对象。为什么会这样?

1 个答案:

答案 0 :(得分:1)

您的list变量的类型为LListSent,这是原始类型(因此未进行参数化),因此在此实例上调用的get方法将返回Object而不是{{1} }。

将变量类型更改为T

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

更清晰的解决方案是使用类型参数T对您的LListSentIterator类进行参数化,这样您的S变量就会变为类型:list