Nehmen wir das folgende Beispiel für Generika
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 {}
}
Es funktioniert gut. Aber wie Sie wissen, können Sie es nicht mit
new GenericsTest(new ArrayList<Dog>());
denn, wie Sie wissen, würde das add(Animal) es ermöglichen, die Cat
s. Die vorgeschlagen Lösung dieses Problems, d.h. Wildcarding, funktioniert auch nicht, denn man kann zwar jede List<Animal>
sur List<? extends Animal>
aber es hat das gleiche Problem: Sie können die GenericsTest
con List<Cat>
und fügen Sie dann Dog
s.
Also meine Frage ist: gibt es eine bequeme Möglichkeit, diese Klasse einmal zu schreiben, und dann verwenden Sie es für alle möglichen Animals
? Natürlich sollte es das oben genannte Problem ohne Weiteres lösen.