Effektives Java-Element 25 Wählen Sie eine Liste aus einem Array aus. Erste Hälfte

Wählen Sie eine Liste aus einem Array

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 " anstelle des Array-Typs "E []" zu verwenden. Sie können auf Leistung oder Kürze verzichten, erhalten jedoch eine bessere Typensicherheit und Interoperabilität.

Recommended Posts

Effektives Java-Element 25 Wählen Sie eine Liste aus einem Array aus. Erste Hälfte
[Java] Ruft Werte zufällig aus einem Array ab
Schauen Sie sich Kotlin aus einer effektiven Java-Perspektive an
[Java] Konvertierung von Array zu Liste
Sortieren einer Liste mit einem Array vom Typ int als Element (Java) (Comparator)
[Java] Von zwei Listen zu einer Array-Liste
Erstellen Sie Scala Seq aus Java, machen Sie Scala Seq zu einer Java-Liste
Informationen zur Java-Array-Liste
Generieren Sie Stream aus einem Array primitiver Typen in Java
Holen Sie sich mit Java eine nicht leere Sammlung aus einem optionalen Stream
[Java] Konvertierung von Listentyp / Array-Typ
[Java] So suchen Sie mit der Methode includes nach Werten in einem Array (oder einer Liste)
[Anmerkung] Was ich in einem halben Jahr von unerfahrenen (Java) gelernt habe
[Read Effective Java] Kapitel 2 Punkt 4 "Unmöglichkeit der Instanziierung mit privatem Konstruktor erzwingen"
[Anmerkung] Was ich in einem halben Jahr von unerfahrenen (Java) gelernt habe (3)
Java-Lernnotiz (Erstellen eines Arrays)
Liste der Java-Objekte sortieren
Führen Sie eine Batchdatei von Java aus
[Java] Deklarieren und initialisieren Sie ein Array
Greifen Sie über eine Java-Anwendung auf Teradata zu
So erstellen Sie ein Java-Array
[Java] So drehen Sie ein zweidimensionales Array mit einer erweiterten for-Anweisung
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
[Java] Generieren Sie mithilfe der Stream-API eine verengte Liste aus mehreren Listen