Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现Iterable的泛型类_Java_Iterable - Fatal编程技术网

Java 实现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(); } /

我想要有一个实现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() {}
   }
}
但这将:

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();
}