Prenez les médicaments génériques exemple suivantComment gérez-vous les génériques "super" 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 {}
}
Il fonctionne très bien. Mais comme vous le savez, vous ne pouvez pas construire avec
new GenericsTest(new ArrayList<Dog>());
parce que, comme vous le savez, le module complémentaire (Animal) serait possible d'ajouter Cat
s. Le suggéré façon de résoudre ce problème, à savoir wildcarding ne fonctionne pas non plus, parce que, oui, vous pouvez changer tous les List<Animal>
en List<? extends Animal>
, mais il a le même problème: vous pouvez créer le GenericsTest
avec List<Cat>
puis ajouter Dog
s. Donc, ma question est la suivante: est-il un moyen pratique d'écrire cette classe une fois, puis l'utiliser pour tous les Animals
? Bien sûr, il devrait résoudre directement le problème mentionné ci-dessus.
Droite. Mon code actuel est plus complexe, parce que mes animaux sont réellement Liste et > ne semble pas fonctionner, mais ce serait la question suivante (si je ne me débrouille pas tout seul) –
Davide