Das verstehe ich nicht, ein Integer ist doch keine ArrayList<Integer>.
Das sind doch 2 unterschiedliche Dinge.
Nur weil man einen Integer zuweisen kann, bedeutet es nicht, dass man auch eine ArrayList<Integer> hinzufügen kann.
Das man jeder Number einen Integer hinzufügen kann, kann ich nachvollziehen.
Nein, er meinte was anderes:
Wenn Du eine Variable vom Typ Number hast, kannst Du da eine Instanz von Integer rein stecken, denn ein Integer ist eine Number. Ebenso kannst Du da auch ein Double rein stecken, denn auch Double ist eine Number.
Bei dem Reinstecken einer ArrayList<Integer> ging es dann um diese Variable und die Variable ist ja ein List<...> daher kann da auch nur eine List betrachtet werden.
Meinst du einen Integer oder eine ArrayList<Integer>() ?
Er meinen einen Integer. Er betrachtet ja die Frage, was man (nicht) in eine List<Double> stecken kann. Eine List von Double nimmt nur Double Werte an, d.h. alles was mein einfügt, muss ein Double sein. (Ist ein Beziehung!)
Schau es dir an wie Kisten. Du sollst dein Zimmer aufräumen. Deine Mama sagt: Du machst eine Kiste, in der kommt alles rein, was irgendwie Lego ist. (List<? extends Lego>). So eine Kiste hast Du aber nicht. Du hast nur die Kisten:
- Kiste für rote Legosteine
- Kiste für Spielzeug
Welche der Kisten könntest Du für "alles was irgendwie Lego ist" rein tun? Die erste packt ja nur rote Legosteine aber alles was irgendwie Lego ist, passt da nicht rein. Die schwarzen Legosteine z.B. kannst Du in so eine Kiste nicht rein packen.
Aber die Kiste für Spielzeug - da passt alles, was Lego ist, rein.
Warum ist ein Supertyp von Number, List<Object> ?
Was hat Number mit einer Liste zu tun?
Nein, Object ist ein Supertyp von Number (Alle Klassen sind direkt oder indirekt von Object abgeleitet) Er hat das List<? super Number> einfach ausgesprochen: "eine Liste von irgendwas, was ein super-Typ von Number ist" Und bei
consumer.addAll(new ArrayList<Integer>());
sagst Du, dass du der List<? super Number> consumer alle Integer Werte eine ArrayList zuweisen willst. Daher ist die Frage hier: Kann man ein Integer (denn das ist der Inhalt einer AraryList<Integer>) zu einer List<? super Number> hinzufügen.
? super Number ist ein konkreter Typ, der eine SuperKlasse von Number ist. Da Integer von Number erbt, ist jede Super Klasse von Number auch eine Super Klasse von Integer.