Ich würde gerne wissen, ob es möglich ist, ein Objekt-Array in einen separaten Objekt-on-Methodenaufruf zu entpacken, der vargs akzeptiert. Diese Frage ähnelt diesem .
Ich habe einen Code wie:
%Vor% Ich möchte das res
-Objekt im zweiten Aufruf entpacken, so dass es ein Objekt-Array mit der Länge 3 anstelle der Länge 2 wie jetzt erhalten würde (wo die zweite Position ein Objekt-Array der Länge 2 ist, dann alle drei) Argumente).
Ist das überhaupt in Java möglich?
Genauer:
Durch
%Vor%Der zweite Aufruf wird wie folgt aufgerufen:
%Vor%wo ich möchte:
%Vor%Ich weiß, dass dies erreicht werden kann, indem man:
%Vor% Aber ich suche nach etwas wie der eingebauten Funktion unpack
Lua oder der Python-Methode, die in der vorher erwähnten SO-Frage beschrieben wurde.
Beide Antworten von @chancea und @ Cyrille-ka sind gut und lösen auch das Problem. Eine der Fakten, die es zu berücksichtigen gilt, ist, ob die Signatur der Methode geändert werden kann. Die @ cyrille-ka-Antwort berücksichtigt die Signatur der Funktion, während @chancea dies nicht tut. Ich denke jedoch, dass man in den meisten Fällen einfach eine einfache Wrapper-Funktion schreiben kann, so dass dies kein Problem sein sollte. Auf der anderen Seite könnte der Weg von @ chancea während der Programmierung einfacher sein (es gibt keinen möglichen Fehler, die Entpackfunktion zu vergessen).
Nun, es gibt keinen syntaktischen Zucker à la Python oder Lua dafür in Java, aber Sie können Ihre eigene unpack
-Methode erstellen:
Dies gibt ein Array zurück, das alle entpackten Eingabeelemente enthält.
Dann können Sie es in Ihrer main
-Methode aufrufen:
Der Grund, warum ich diese Methode generisch mache, ist, dass Sie sie zum Beispiel mit einem String[]
-Array aufrufen können, ohne eine Warnung zu generieren. Aus irgendeinem Grund denkt der Java-Compiler, dass diese Methode eine Chance hat, den Heap zu "verschmutzen", aber das ist nicht der Fall, deshalb habe ich eine @SafeVarargs
Annotation hinzugefügt.
Dies implementiert nicht die Unpack
-Lösung, stattdessen geht es darum, indem Sie overload method
machen, wie ich in meinem Kommentar gesagt habe. Ich weiß nicht, ob das überhaupt das ist, was du wolltest, aber ich habe es zum Laufen gebracht und ich fühlte mich, als würde ich dies als Referenz veröffentlichen.
Versuchen Sie stattdessen, als ein Array von Object
zurückzukehren. Verketten Sie anschließend "three"
am Ende des zurückgegebenen Arrays.
Tags und Links java