Ich lese gerade Java Generics, und ich bin ein bisschen fest, wenn es um Wildcards geht.Java Generics - Class eine Unterklasse von sich selbst?
ich diese Methode aus der Klasse Collections gegeben wurde:
public void <T> copy(List<? super T> dest, List<? extends T> src) {
for(int i = 0; i < src.size(); i++) {
dest.set(i, src.get(i));
}
}
Ich habe dann gesagt, dass es möglich ist, das Verfahren so zu nennen:
List<Object> objs = new ArrayList<Object>();
List<Integer> ints = new ArrayList<Integer>();
Collections.copy(objs, ints);
Da die Typ-Parameter haben dem Compiler überlassen wurde, um zu bestimmen, sagt das Buch, dass der Compiler den Typparameter zu Integer wählt.
Aber wie ist das möglich?
Wenn es genommen wurde Integer zu sein, würde dies, dass in der Methodendeklaration bedeuten -
List<? extends T>
-List<Integer extends Integer>
übersetzen würde.
Ist das ein Fehler oder gibt es andere Regeln in Bezug auf Generics? Ich habe gegoogelt und die Mehrheit der Ergebnisse sagen, dass eine Klasse keine Unterklasse von sich selbst sein kann.
Nizets Antwort ist natürlich richtig und wenn du nur den Punkt vermisstest, den er erklärt hat, dann ist alles gut. Generika können jedoch sehr schnell sehr verwirrend werden, und wenn Sie das Gefühl haben, dass Sie eine ausführlichere Erklärung zu diesem speziellen Fall benötigen, kann ich versuchen, eine solche zu geben. – user1803551