Powiedzmy, że mam metodę m (), która przyjmuje tablicę ciągów jako argument. Czy istnieje sposób, aby po prostu zadeklarować tę tablicę w linii podczas wykonywania połączenia? tj. zamiast:
String[] strs = {"blah", "hey", "yo"};
m(strs);
Czy mogę po prostu zastąpić to jedną linią i uniknąć deklarowania nazwanej zmiennej, której nigdy nie będę używać?
Odpowiedzi:
źródło
Draemon ma rację. Możesz również zadeklarować
m
przyjmowanie varargs :źródło
void m(String... strs, Integer... intgrs)
na przykład.void m(Integer i, Double d, String... str)
(String ... strs)
Innym sposobem, aby to zrobić, jeśli chcesz, aby wynik był wstawiany jako List, możesz to zrobić w następujący sposób:
źródło
Arrays.asList("string1", "string2", ...)
List
ztype[]
którymtype
jest prymitywne. np.Arrays.asList([some ints])
wyniki wList<int[]>
.set
zwrócone,List
a to zmodyfikuje tablicę.Możesz bezpośrednio napisać tablicę we współczesnej Javie, bez inicjatora. Twój przykład jest teraz ważny. Generalnie najlepiej jest mimo to nazwać parametr.
lub
Jeśli masz do inline, musisz zadeklarować typ:
lub użyj varargs (zmienne argumenty)
Mamy nadzieję, że programiści Javy umożliwią domyślną inicjalizację w przyszłości
Aktualizacja: odpowiedź Kotlin
Kotlin znacznie ułatwił pracę z tablicami ! W przypadku większości typów wystarczy użyć
arrayOf
i domyślnie określi typ. Podaj nic, aby zostawić je puste.Prymitywy mają funkcje narzędziowe. Podaj nic, aby zostawić je puste.
Jeśli masz już
Collection
i chcesz przekonwertować go na wbudowaną tablicę, po prostu użyj:Aby wymusić typ tablicy, użyj:
źródło
doSomething({"blah", "hey", "yo"})
, o co pierwotnie zadawano pytanie.Możesz gdzieś stworzyć metodę
następnie użyj go
dla lepszego wyglądu.
źródło
Chciałbym dodać, że składnia inicjalizacji tablicy jest bardzo zwięzła i elastyczna. Używam go dużo, aby wyodrębnić dane z mojego kodu i umieścić je w bardziej użytecznym miejscu.
Na przykład często tworzyłem takie menu:
Pozwoliłoby mi to napisać kod come, aby skonfigurować system menu. „+” Wystarczy, aby umieścić ten element pod poprzednim elementem.
Mógłbym powiązać go z klasą menuHandler poprzez konwencję nazewnictwa metod, nazywając moje metody czymś w rodzaju „menuFile, menuFileSave, menuFileLoad, ...” i wiążąc je refleksyjnie (istnieją inne alternatywy).
Ta składnia pozwala NA NIESAMOWITE krótkie definicje menu i niezwykle wielokrotną metodę „initMenus”. (Jednak nie zawracam sobie głowy ponownym użyciem, ponieważ pisanie jest zawsze fajne i zajmuje tylko kilka minut + kilka wierszy kodu).
za każdym razem, gdy zobaczysz wzorzec w kodzie, sprawdź, czy możesz go zastąpić czymś takim, i zawsze pamiętaj, jak zwięzła jest składnia inicjalizacji tablicy !.
źródło
Inną opcją jest użycie ArrayUtils.toArray w org.apache.commons.lang3
źródło
Jak mówi Draemon, Java najbliższa macierzom wbudowanym jest
new String[]{"blah", "hey", "yo"}
jednak fajna sztuczka, która pozwala zrobić coś takiegoarray("blah", "hey", "yo")
z automatycznie wywnioskowanym typem.Pracowałem nad użytecznym interfejsem API do rozszerzenia języka Java, aby umożliwić wbudowane tablice i typy kolekcji. Aby uzyskać więcej informacji, przejdź do projektu Google Espresso4J lub sprawdź tutaj
źródło