Wildcards-Generics

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

könnte mir jemand vielleicht verraten, warum die erste Zeile geht, die zweite aber nicht?

Code:
List<?> ratna = new ArrayList<?>();
List<ArrayList<?>> rutnu = new ArrayList<ArrayList<?>>();

Vielleicht auch nur stichwortartig, wenn das Thema eigentlich zu umfangreich ist.

Vielen Dank.

Viele Grüße aus Rheinland,

Eure Ratna
 
Hallo sheel,

mir geht es darum, warum der Compiler bei der 1. Zeile meckert, dass er nicht weiss, wie er zu instantiieren kann.
Bei der 2. Zeile meckert der allerdings nicht. Das verstehe ich nicht. Als ob er es mit dem Instantiieren nur oberflächlich prüft.
Mit oberflächlich meine ich:
Zeile 1 --> er fragt, was der Typ der einzelnen Elemente in der Liste ist.
Zeile 2 --> er weiss, was der Typ der einzelnen Elemente in der Liste ist, nämlich jeweils eine weitere ArrayList. Aber in dieser Kind-ArrayList habe ich ja keinen Typ angegeben. Da meckert der nicht? Warum meckert der dann bei der 1. Zeile?

Viele Grüße aus Rheinland,

Eure Ratna
 
Hallo sheel,
War es nicht umgekehrt?

Stimmt, ich habe mich vertan. Es sind diese 2 Zeilen:
Code:
List<?> a = new ArrayList<?>();                                               // Kompilierfehler -can not instantiate ArrayList- 
List<ArrayList<?>> b = new ArrayList<ArrayList<?>>();         // OK

Mir ist bewusst, dass bei 1. Fall die Sinnhaftigkeit von Wildcard fehlt.
Der 2. Fall kann dagegen sinnvoll sein.
Nach stundenlanger Forschung habe ich dann folgendes gefunden. Ich zitiere:
Wildcards may not appear at the top level in class instance creation expressions(new), ...
Only top-level parameters in instance creation are prohibited from containing wildcards. Nested wildcards are permitted.
...

Ich habe den Eindruck, an dieser Stelle ist es nicht sinnvoll, zu wissen, WARUM der Kompiler so konzipiert ist. Das Zitierte gehört zum Thema "Einschränkungen von Wildcards".

Viele Grüße aus Rheinland,

Eure Ratna
 
Zurück