Java's Multiple Wildcards: Die Verwirrung des Compilers entmystifizieren
Während der Codeausschnitt in der Frage zunächst verwirrend erscheinen mag, sind die zugrunde liegenden Prinzipien recht einfach und halten Sie sich an das generische Typsystem von Java.
Die Rolle von Platzhalter
Platzhalter (*) stehen für unbekannte Typen. Im Snippet führt die Verwendung mehrerer Platzhalter zu Unsicherheit für den Compiler:
static void doNothing(List<?> list1, List<?> list2) { }
Da die Platzhalter nichts miteinander zu tun haben, können Sie doNothing mit Listen verschiedener Typen aufrufen, z. B. List
Verschachtelte Platzhalter und Capture-Konvertierung
Die Verwirrung entsteht hauptsächlich durch Missverständnisse über die Rolle verschachtelter Platzhalter:
static void probablyIllegal(List<List<?>> lol, List<?> list) { }
In In diesem Fall wird die verschachtelte Platzhalterliste List> erfasst keine Typen wie List
static void nowDefinitelyIllegal(List<? extends List<?>> lol, List<?> list) { }
Wenn wir nun versuchen, list (das ein List
Zusätzlich Hinweise
Das obige ist der detaillierte Inhalt vonWie wirken sich die mehreren Platzhalterzeichen von Java auf das Verhalten und die Typkompatibilität generischer Methoden aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!