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. Y a-t-il un moyen de déclarer ce tableau en ligne lorsque je fais l’appel? c’est-à-dire au lieu de:

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

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

 m(new Ssortingng[]{"blah", "hey", "yo"}); 

Draemon a raison. Vous pouvez également déclarer m comme prenant varargs :

 void m(Ssortingng... strs) { // strs is seen as a normal Ssortingng[] inside the method } m("blah", "hey", "yo"); // no [] or {} needed; each ssortingng is a separate arg here 

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

 Arrays.asList(new Ssortingng[] { "Ssortingng1", "ssortingng2" }); 

Vous pouvez créer une méthode quelque part

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

puis l’utiliser

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

pour mieux regarder.

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.

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

ou

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

Si vous devez vous connecter, vous devrez déclarer le type:

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

ou utiliser varargs (arguments variables)

 void functionCall(Ssortingng...ssortingngArray) { // Becomes a Ssortingng[] containing any number of items or empty } functionCall("blah", "hey", "yo"); 

Nous espérons que les développeurs de Java autoriseront une initialisation implicite dans le futur

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

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

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

Cela me permettrait d’écrire du code pour configurer un système de menus. Le “+” suffit à lui demander de placer cet object sous l’élément précédent.

Je pourrais le lier à la classe menuHandler soit par une convention de nommage des méthodes 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 de menu incroyablement brève et une méthode “initMenus” extrêmement réutilisable. (Pourtant, je ne prend pas la peine de le réutiliser car il 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 ça, et souvenez-vous toujours de la concision de la syntaxe d’initialisation du tableau!

Comme le dit Draemon, le plus proche de Java pour les tableaux en ligne est le new Ssortingng[]{"blah", "hey", "yo"} mais il y a une astuce qui vous permet de faire quelque chose comme:

array("blah", "hey", "yo") avec le type automatiquement inféré.

J’ai travaillé sur une API utile pour augmenter le langage Java afin de permettre l’utilisation de tableaux et de types de collection en ligne. Pour plus de détails google projet Espresso4J ou consultez ici

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

 ArrayUtils.toArray("elem1","elem2")