为什么Java迭代器构造函数签名没有迭代器类型?

Nig*_*ht0 2 java generics iterator signature

这可能只是Java迭代器构造函数的签名布局的问题.

必须T在类定义中指定迭代器类型(作为抽象类型或其他东西); 那么,为什么它的相应构造函数public GunmenIterator(List list)不 包含这个T迭代器类型呢?虽然通常T在迭代器中使用通用类型,但这只是一种设计选择以匹配其他方法吗?

public class GunmenIterator<T> implements Iterator<T> {

  private List<T> list;
  private Iterator<T> iter;

  public GunmenIterator(List<T> list) {
    this.list = list;
    this.iter = list.iterator();
  }

  public static void main(String[] args) {
    Iterator<Integer> gunmenIter = new GunmenIterator<Integer>(gunmen);
  }
}
Run Code Online (Sandbox Code Playgroud)

如上所示,迭代器类型<Integer> 应该存在于初始化中(否则,将出现编译器警告).但是,<T>无法添加到构造函数的签名中.

JB *_*zet 5

您不需要<T>在构造函数签名中,因为构造函数是类的构造函数GunmenIterator<T>.因此暗示它的构造函数创建了一个GunmenIterator<T>.

重复这<T>将是多余的.构造函数总是创建它所属的类的实例.