Tome el ejemplo siguiente genéricos¿Cómo manejas los "súper" genéricos en java?
import java.util.List;
import java.util.ArrayList;
public class GenericsTest {
private List<Animal> myList;
public static void main(String args[]) {
new GenericsTest(new ArrayList<Animal>()).add(new Dog());
}
public GenericsTest(List<Animal> list) {
myList = list;
}
public void add(Animal a) {
myList.add(a);
}
public interface Animal {}
public static class Dog implements Animal {}
public static class Cat implements Animal {}
}
Trabaja muy bien. Pero como usted sabe, no se puede construir con
new GenericsTest(new ArrayList<Dog>());
porque, como usted sabe, el complemento (Animal) haría posible añadir Cat
s. El sugirió forma de resolver este problema, es decir, comodín no funciona bien, porque, sí, se puede cambiar cada List<Animal>
en List<? extends Animal>
pero tiene el mismo problema: se puede crear el GenericsTest
con List<Cat>
y luego añadir Dog
s.
Así que mi pregunta es: ¿hay una manera conveniente de escribir esta clase una vez, y luego usarla para todos los posibles Animals
? Por supuesto, debería resolver directamente el problema mencionado anteriormente.
Derecha. Mi código real es más complejo, porque mis Animales en realidad son List y > no parece funcionar, pero esa sería mi próxima pregunta (si no lo hago por mí mismo) –
Davide