web-dev-qa-db-fra.com

Un moyen de déclarer un tableau en ligne?

Disons que j'ai une méthode m() qui prend un tableau de chaînes comme argument. Existe-t-il un moyen de déclarer ce tableau en ligne lorsque je passe l'appel? c'est-à-dire au lieu de:

String[] strs = {"blah", "hey", "yo"};
m(strs);

Puis-je simplement remplacer ceci par une ligne et éviter de déclarer une variable nommée que je ne vais jamais utiliser?

567
DivideByHero
m(new String[]{"blah", "hey", "yo"});
876
Draemon

Draemon est correct. Vous pouvez également déclarer m comme prenant varargs :

void m(String... strs) {
    // strs is seen as a normal String[] inside the method
}

m("blah", "hey", "yo"); // no [] or {} needed; each string is a separate arg here
108
Michael Myers

Une autre façon de le faire, si vous voulez que le résultat soit inséré dans une liste, vous pouvez le faire comme ceci:

Arrays.asList(new String[] { "String1", "string2" });
28
Antonio Carlos

Vous pouvez écrire directement le tableau dans Java moderne, sans initialiseur. Votre exemple est maintenant valide. Il est généralement préférable de nommer le paramètre de toute façon.

String[] array = {"blah", "hey", "yo"};

ou

int[] array = {1, 2, 3};

Si vous avez pour vous connecter, vous devez déclarer le type:

functionCall(new String[]{"blah", "hey", "yo"});

ou utilisez varargs (arguments variables)

void functionCall(String...stringArray) {
    // Becomes a String[] containing any number of items or empty
}

functionCall("blah", "hey", "yo");

Espérons que les développeurs Java autoriseront l’initialisation implicite dans le futur

13
Gibolt

Vous pouvez créer une méthode quelque part

public static <T> T[] toArray(T... ts) {
    return ts;
}

puis l'utiliser

m(toArray("blah", "hey", "yo"));

pour mieux regarder.

9
Mahpooya

J'aimerais ajouter que la syntaxe d'initialisation de tableau est très succincte et flexible. Je l'utilise beaucoup pour extraire des données de mon code et les placer dans un endroit plus utilisable.

Par exemple, j'ai souvent créé des menus comme celui-ci:

Menu menu=initMenus(menuHandler, new String[]{"File", "+Save", "+Load", "Edit", "+Copy", ...});

Cela me permettrait d'écrire du code pour configurer un système de menus. Le "+" est suffisant pour lui dire de placer cet élément sous le précédent.

Je pouvais le lier à la classe menuHandler soit par une convention de dénomination de méthode en nommant mes méthodes quelque chose comme "menuFile, menuFileSave, menuFileLoad, ..." et en les liant de manière réfléchie (il existe d'autres alternatives).

Cette syntaxe permet une définition extrêmement courte du menu et une méthode "initMenus" extrêmement réutilisable. (Pourtant, je ne me préoccupe pas de le réutiliser car c'est toujours amusant d'écrire et ne prend que quelques minutes + quelques lignes de code).

chaque fois que vous voyez un motif dans votre code, voyez si vous pouvez le remplacer par quelque chose comme ceci et rappelez-vous toujours à quel point la syntaxe d'initialisation de tableau est succinct !.

4
Bill K

Comme le dit Draemon, le plus proche de Java dans les tableaux en ligne est new String[]{"blah", "hey", "yo"}, mais il existe un truc très astucieux qui vous permet de faire quelque chose comme:

array("blah", "hey", "yo") avec le type déduit automatiquement.

Je travaille sur une API utile pour augmenter le langage Java afin de permettre l'utilisation de tableaux en ligne et de types de collection. Pour plus de détails sur le projet Google Espresso4J ou consultez-le ici

2

Une autre option consiste à utiliser ArrayUtils.toArray dans org.Apache.commons.lang3.

ArrayUtils.toArray("elem1","elem2")
1
Shravan Ramamurthy