Ich mag würde ein Interator wie folgt schreiben:Generifying mit „super“
class Plant { }
class Tree extends Plant { }
class Maple extends Tree { }
// Iterator class: compiler error on the word "super".
class MyIterator<T super Maple> implements Iterator<T> {
private int index = 0;
private List<Maple> list = // Get the list from an external source.
public T next() {
Maple maple = list.get(index++);
// Do some processing.
return maple;
}
// The other methods of Iterator are easy to implement.
}
Konzeptionell ist die Idee, einen Iterator zu haben, wie es aussieht, Bäume oder Pflanzen gibt (obwohl sie immer Maples) ohne separate Klassen für jedes zu schreiben.
Aber der Compiler mag es nicht, wenn ich mit T super Maple
generalisieren; anscheinend können Sie nur eine Klasse mit T extends Something
generifizieren. Kennt jemand einen guten Weg, dasselbe zu erreichen?
Meine Motivation zu fragen ist, dass ich ein Programm habe, das Schnittstellen für seine API verwendet. Ich möchte eine Methode haben, die einen Iterator von Schnittstellen zurückgibt (für die API), und eine andere, die einen Iterator der Implementierungsklassen zurückgibt (zur internen Verwendung).
lese ich das falsch? und dann 'private List list' und' public T next() {T maple = list.get (index ++); Ahorn zurückgeben;) ' –
DefyGravity