繁体   English   中英

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

[英]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返回一个T对象。 为什么会这样?

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

将变量的类型更改为LListSent<T>

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

较干净的解决方案是使用类型参数S参数化您的LListSentIterator类,因此您的list变量将变为类型: LListSent<S>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM