me gustaría escribir un Interator así:Generifying con "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.
}
Conceptualmente, la idea es tener un iterador que parece que vuelve árboles o plantas (a pesar de que son siempre los arces) sin escribir clases separadas para cada uno.
Pero al compilador no le gusta cuando genero con T super Maple
; aparentemente, solo puedes generar una clase usando T extends Something
. ¿Alguien sabe de una buena manera de lograr lo mismo?
Mi motivación para preguntar es que tengo un programa que usa interfaces para su API. Quiero tener un método que devuelva un iterador de interfaces (para la API) y otro que devuelva un iterador de las clases de implementación (para uso interno).
¿estoy leyendo esto mal? y luego 'private List list' y' public T next() {T maple = list.get (index ++); devolver arce;) ' –
DefyGravity