Der Unterschied zwischen Sequenzen und generischen Typen ist
E, `List <E>` `und` `List <String>`
sind technisch als nicht reifbare Typen bekannt.
Intuitiv sind nicht darstellbare Typen Typen, deren Laufzeitdarstellung weniger informativ ist als ihre Darstellung zur Kompilierungszeit.
Die einzigen parametrisierten Typen, die verkörpert werden können, sind Wildcard-Typen ohne Grenzen wie "List >" "Und" Map ,?> " Die Erzeugung von Sequenzen ohne Grenzwert vom Platzhalter ist zulässig, aber selten nützlich.
Das Verbot der Erzeugung generischer Sequenzen kann ärgerlich sein. Beispielsweise können generische Typen im Allgemeinen kein Array ihrer Elementtypen zurückgeben.
Dies bedeutet auch, dass Sie verwirrende Warnungen erhalten können, wenn Sie Argumentmethoden mit variabler Länge in Kombination mit generischen Typen verwenden. Dies liegt daran, dass jedes Mal, wenn Sie eine Argumentmethode mit variabler Länge aufrufen, ein Array generiert wird, das die Parameter mit variabler Länge enthält.
(Im folgenden Code entspricht args dem)
static int sum(int... args) {
int sum = 0;
for (int arg : args) {
sum += arg;
}
return sum;
}
Wenn der Elementtyp dieses Arrays nicht reproduzierbar ist, werden Sie gewarnt. Gegen eine Warnung können Sie nur wenig tun, außer sie zu unterdrücken und das Mischen von Generika und Argumenten variabler Länge in Ihrer API zu vermeiden.
Wenn Sie einen generischen Fehler bei der Sequenzgenerierung erhalten, besteht die beste Lösung normalerweise darin, den Auflistungstyp "List
Recommended Posts