Java 实现Iterable的泛型类
我想要有一个实现T类型的Iterable(我们称之为ImplIterable)的泛型类,它在某个类(不是泛型类类型)上实现一个Iterable接口;例如:Java 实现Iterable的泛型类,java,iterable,Java,Iterable,我想要有一个实现T类型的Iterable(我们称之为ImplIterable)的泛型类,它在某个类(不是泛型类类型)上实现一个Iterable接口;例如: public class ImplIterable <T> implements Iterable<A> { private A[] tab; public Iterator<A> iterator() { return new ImplIterator(); } /
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() {}
}
}
但这将:
Iterable<A> = new ImplIterable();
for (A a : iable) {
a.aStuff();
}
Iterable=new ImplIterable();
对于(A:可行的){
a、 aStuff();
}
我不明白为什么后者不编译,如果它正确地实现了iterable,为什么我不能迭代ImplIterable。我做错什么了吗/这类问题有解决方法吗?当使用没有泛型参数的泛型类时,该类中的所有泛型都将被禁用
由于
ImplIterable
是泛型的,并且您将其作为非泛型类使用,因此它内部的泛型参数消失,并成为Object
s的ImplIterable
(非泛型)。它会给出什么错误?找到不兼容的类型:java.lang.Object required:java.lang.String
谢谢!我不知道仿制药是这样工作的。ImplIterable和任何类型一样有效。前一种情况之所以有效,是因为Iterable中的泛型类型没有被删除——这在某种程度上是有意义的。不客气。这是出于兼容性的原因。您应该通过单击空心复选框来接受此答案。
Iterable<A> = new ImplIterable();
for (A a : iable) {
a.aStuff();
}