Warum unterstützt Java keine Support-Sammlungen?
In meinem Java-code verwende ich oft die sehr handlich method(Class... args)
varargs. So weit ich weiß, erlauben Sie Ihnen zu übergeben, jede Menge Class
Objekten, oder ein array von Class[]
. Da ich auch oft die Java-collection-Klassen, ich bin frustriert durch den Mangel an Kompatibilität zwischen den beiden. Als ein Ergebnis war, dass ich am Ende tut collection.toArray()
aber das hat einige geben die Fragen der Sicherheit.
So, jetzt die Frage: warum nicht Java ermöglichen den Instanzen der Iterable<T>
als vararg-Argumente, solange der generische Typ passt die T...
Art der vararg? Hat nicht jeder das verwenden, Listen, sets, etc.. die ganze Zeit? Gibt es eine einfache, typsichere Weg, um die Umwandlung von der Abholung bis zur vararg?
InformationsquelleAutor der Frage tb189 | 2011-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Grund ist einfach: eine variable stelligkeit parameter ist einfach ein old-school-array-Parameter mit einigen zusätzlichen Metadaten, die sagt dem compiler, um einige syntaktische Zucker (nämlich, es ermöglicht die implizite array-Erstellung).
Also aus der Perspektive der JVM
Object...
ist so ziemlich das gleiche wieObject[]
. So dass Sammlungen als gut würde erfordern mehr invasive ändern der JVM (die hat keine explizite Unterstützung für Sammlungen auf dem neuesten Stand).Beachten Sie, dass wenn Sie möchten, unterstützen beide Möglichkeiten, dann die Sammlung-basierte Methode ist wahrscheinlich der bessere Ansatz:
Der Grund dafür ist, dass mit
Arrays.asList()
ist in der Regel einem günstigeren Betrieb alsCollection.toArray()
(denn es schafft eine einfache wrapper).InformationsquelleAutor der Antwort Joachim Sauer