Nehmen Sie das folgende Beispiel GenerikaWie gehen Sie mit "Super" Generika in Java um?
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 konstruieren mit
new GenericsTest(new ArrayList<Dog>());
weil, wie Sie wissen, wird das Add (Tier) würde möglich machen Cat
s hinzuzufügen. Die vorgeschlagen Weg, um dieses Problem zu lösen, das heißt von Platzhaltern funktioniert auch nicht, weil, ja, Sie jeden List<Animal>
in List<? extends Animal>
ändern können, aber es hat das gleiche Problem: Sie können die GenericsTest
mit List<Cat>
erstellen und dann Dog
s hinzufügen.
Also meine Frage ist: Gibt es eine bequeme Möglichkeit, diese Klasse einmal zu schreiben, und dann für alle möglichen Animals
verwenden? Natürlich sollte es das oben erwähnte Problem einfach lösen.
Richtig. Mein tatsächlicher Code ist komplexer, weil meine Tiere eigentlich List sind und > scheint nicht zu funktionieren, aber das wäre die nächste Frage (wenn ich nicht selbst herausfinden würde) –
Davide