Ich lese auf Generics in Java ATM, und die Dinge gehen ein wenig langsam würde gerne etwas Hilfe. Ich las von Oracles eigene Datenbank:Generics Java Wildcards und Subtyping
https://docs.oracle.com/javase/tutorial/java/generics/subtyping.html
Am unteren wir List<Integer>
ist ein Subtyp von List<? extends Number>
ich auch kam in dieser Stackoverflow Frage sehen:
Java Generic type : difference between List <? extends Number> and List <T extends Number>
Welche sagt in einer Antwort: das ist wahr:
((List<Integer>)list).add((int) s);
Ich habe es verifiziert, also ist das in Ordnung. Aber ich verstehe es nicht vollständig.
Was ist, wenn die Wildcard die Short-Klasse ist und ich eine Zahl höher als 2^15-1 (= 32767) hinzufügen. Sollte es keinen Fehler geben?
Ich habe sogar versucht, so etwas wie dieses und es funktioniert gut:
import java.util.*;
class CastingWildcard{
public static void main(String[] args){
List<? extends Number> list = new ArrayList<Short>();
int s=32770;
((List<Integer>)list).add((int) s);
System.out.println(list.get(0));
}
}
Fazit: Warum kann ich List<? extends Number>
-List<Integer>
werfen, wenn die Platzhalter könnte kurz sein, und sogar Byte, die auch Nummer erstreckt?
Danke für die Antwort. Ich werde es später anschauen. – martius
Was bedeutet Gießen (Liste) ohne Typ? Ist es gleich zu "Liste list2 = (Liste ) (Objekt) Liste" in Ihrer zweiten Zeile dort? Davon ableitend: http://stackoverflow.com/questions/1917844/how-to-cast-listobject-to-listmyclass –
martius