Ich habe einen von Google erstellten JAVA-Code durchsucht und das ImmutableSet gefunden: Ссылка
Sie haben die Methode of () auf verschiedene andere Arten implementiert:
%Vor%Ich habe die Implementierung überprüft, die sich hier befindet: Ссылка
Es gibt eine create-Methode mit folgender Signatur:
%Vor%umschließt das
%Vor%Methode. Die public Methoden übergeben die Parameter einfach an die create (E ... elements) signierte Methode, die schließlich die andere create Methode aufruft.
Ich nehme an, dass die public Methoden mit fester Anzahl von Parametern unnötig sind, da wir die of (E ... elements) Methode haben.
Meine Frage ist, warum haben sie das so gemacht? Performance? Oder ist es ein Muster?
Danke.
Es kann nicht wirklich mit der Leistung in Beziehung stehen: Alle Methoden delegieren an dieselbe Erstellungsmethode, die sowieso ein Array erwartet.
Meine Vermutung ist, dass es sich um Warnungen handelt. Betrachten Sie das folgende, minimale Snippet:
%Vor% Der Aufruf von of
in der main-Methode ist in Ordnung: Er entspricht der 2-Argumente-Version der Methode of
. Kommentiere nun die 2-args-Version der of
-Methode aus. Dann ist der Anruf immer noch in Ordnung, wird aber direkt die Varags-Version aufrufen. Dadurch wird ein generisches Array erstellt und eine Warnung ausgegeben. (Diese Warnung wird in der 2-Argumente-Version natürlich unterdrückt).
Zusammenfassend gehe ich davon aus, dass dies dazu dient, Warnungen für Clients der Bibliothek zu vermeiden, die die Methode of
mit mehreren Objekten eines generischen Typs aufrufen wollen.
Glücklicherweise werden solche Dinge in der Zukunft nicht mehr nötig sein, dank Ссылка
Leistung. Um die E ... Version der Methode aufzurufen, muss der Aufrufer ein neues Array zuordnen. Der Aufrufer muss nur die Argumente auf dem Stapel drücken, um die anderen Methoden aufzurufen.
Sie tun es, um Speicher effizienter zu verwalten. Wenn Sie eine unveränderbare Sammlung mit einem kleinen Satz von Elementen haben, ist es besser, die Größe der Sammlung explizit festzulegen. Andernfalls erstellt Java eine Sammlung mit einer größeren Größe. Beispiel: Ein HashSet hat, wenn nicht anders angegeben, eine Anfangsgröße von 12 Einträgen.
Tags und Links java performance theory