Question

Je veux avoir une classe générique qui implémente Iterable (Appelons-ImplIterable) de type T qui implémente une interface Iterable sur une certaine classe (qui ne sont pas du type de classe générique); par exemple:

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

Où A est une classe. Maintenant, ce code ne compilera pas:

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

Mais cette volonté:

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

Je ne comprends pas pourquoi ce dernier ne compile pas et pourquoi je ne peux pas itérer sur ImplIterable si correctement met en œuvre itérables. Ai-je fait quelque chose de mal / est-il une solution à ce type de problèmes?

Était-ce utile?

La solution

Lorsque vous utilisez une classe générique sans paramètre générique, tous les génériques de cette catégorie sont désactivées.

Depuis ImplIterable est générique, et que vous utilisez comme une classe non générique, les paramètres génériques l'intérieur de celui-ci disparaissent, et il devient un Iterable (non générique) de Objects.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top