Angenommen, ich habe eine Methode m (), die ein Array von Strings als Argument verwendet. Gibt es eine Möglichkeit, dieses Array einfach inline zu deklarieren, wenn ich den Anruf tätige? dh anstelle von:
String[] strs = {"blah", "hey", "yo"};
m(strs);
Kann ich dies einfach durch eine Zeile ersetzen und vermeiden, eine benannte Variable zu deklarieren, die ich niemals verwenden werde?
Antworten:
quelle
Draemon ist richtig. Sie können auch deklarieren
m
, dass Sie varargs nehmen :quelle
void m(String... strs, Integer... intgrs)
zum Beispiel.void m(Integer i, Double d, String... str)
(String ... strs)
Wenn Sie das Ergebnis als Inline-Liste wünschen, können Sie dies folgendermaßen tun:
quelle
Arrays.asList("string1", "string2", ...)
List
intype[]
dem angegebentype
ist, wo sich dieses Grundelement befindet. zBArrays.asList([some ints])
ergibt aList<int[]>
.set
auf die zurückList
und es wird das Array ändern.Sie können das Array direkt in modernem Java ohne Initialisierer schreiben. Ihr Beispiel ist jetzt gültig. Es ist im Allgemeinen am besten, den Parameter trotzdem zu benennen.
oder
Wenn Sie haben , um inline, müssen Sie die Art erklären:
oder benutze varargs (variable Argumente)
Hoffentlich Java-Entwickler werden implizite Initialisierung im erlauben Zukunft
Update: Kotlin Antwort
Kotlin hat die Arbeit mit Arrays so viel einfacher gemacht! Verwenden
arrayOf
Sie für die meisten Typen einfach und es wird implizit der Typ bestimmt. Gib nichts, um sie leer zu lassen.Grundelemente haben Dienstprogrammfunktionen. Gib nichts, um sie leer zu lassen.
Wenn Sie bereits eine haben
Collection
und diese in ein Inline-Array konvertieren möchten, verwenden Sie einfach:Wenn Sie einen Array-Typ erzwingen müssen, verwenden Sie:
quelle
doSomething({"blah", "hey", "yo"})
, worum es in der ursprünglichen Frage ging.Sie können irgendwo eine Methode erstellen
dann benutze es
für einen besseren Blick.
quelle
Ich möchte hinzufügen, dass die Array-Initialisierungssyntax sehr prägnant und flexibel ist. Ich benutze es VIEL, um Daten aus meinem Code zu extrahieren und sie an einem besser verwendbaren Ort zu platzieren.
Als Beispiel habe ich oft Menüs wie diese erstellt:
Dies würde es mir ermöglichen, Come-Code zu schreiben, um ein Menüsystem einzurichten. Das "+" reicht aus, um anzugeben, dass das Element unter dem vorherigen Element platziert werden soll.
Ich könnte es entweder durch eine Methodennamenskonvention an die menuHandler-Klasse binden, indem ich meine Methoden wie "menuFile, menuFileSave, menuFileLoad, ..." benenne und sie reflektierend binde (es gibt andere Alternativen).
Diese Syntax ermöglicht eine erstaunlich kurze Menüdefinition und eine äußerst wiederverwendbare "initMenus" -Methode. (Trotzdem mache ich mir nicht die Mühe, es wiederzuverwenden, weil es immer Spaß macht, es zu schreiben und nur ein paar Minuten + ein paar Codezeilen dauert).
Wenn Sie ein Muster in Ihrem Code sehen, prüfen Sie, ob Sie es durch so etwas ersetzen können, und denken Sie immer daran, wie prägnant die Syntax für die Array-Initialisierung ist.
quelle
Eine andere Option ist die Verwendung von ArrayUtils.toArray in org.apache.commons.lang3
quelle
Wie Draemon sagt, kommt Java Inline-Arrays am nächsten,
new String[]{"blah", "hey", "yo"}
es gibt jedoch einen netten Trick, mit dem Sie so etwas tun könnenarray("blah", "hey", "yo")
mit dem Typ automatisch abgeleitet.Ich habe an einer nützlichen API gearbeitet, um die Java-Sprache zu erweitern und Inline-Arrays und Sammlungstypen zu ermöglichen. Für weitere Informationen google project Espresso4J oder schau es dir hier an
quelle