实现Iterable的泛型类

时间:2011-03-18 20:02:59

标签: java iterable

我希望有一个泛型类,它实现了类型为T的Iterable(让我们称之为ImplIterable),它在某个类上实现了一个Iterable接口(不属于泛型类);例如:

public class ImplIterable <T> implements Iterable<A> {
   private A[] tab;

   public Iterator<A> iterator() {
      return new ImplIterator();
   }

   // doesn't work - but compiles correctly.
   private class ImplIterator implements Iterator<A> {
      public boolean hasNext() { return true; }

      public A next() { return null; }

      public void remove() {}
   }
}

A是某类。现在,这段代码将无法编译:

ImplIterable iable = new ImplIterable();
for (A a : iable) {
   a.aStuff();
}

但这会:

Iterable<A> = new ImplIterable();
for (A a : iable) {
   a.aStuff();
}

我不明白为什么后者不能编译,为什么我不能迭代ImplIterable如果它正确实现了iterable。我做错了/是否有针对此类问题的解决方法?

1 个答案:

答案 0 :(得分:3)

当您使用没有泛型参数的泛型类时,该类中的所有泛型都将被禁用。

由于ImplIterable是通用的,并且您将其用作非泛型类,因此其中的泛型参数消失,并且它变为Iterable(非泛型){{ 1}} S上。