我希望有一个泛型类,它实现了类型为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。我做错了/是否有针对此类问题的解决方法?
答案 0 :(得分:3)
当您使用没有泛型参数的泛型类时,该类中的所有泛型都将被禁用。
由于ImplIterable
是通用的,并且您将其用作非泛型类,因此其中的泛型参数消失,并且它变为Iterable
(非泛型){{ 1}} S上。