web-dev-qa-db-fra.com

Initialiser la liste <> avec Arrays.asList

Pourquoi ça marche:

String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array);

mais cela ne signifie pas:

List<String> list = Arrays.asList({"a","b","c"});
38
faboolous

Ceci est une main courte uniquement disponible lors de la construction et de l'attribution d'un tableau.

String[] array = {"a", "b", "c"};

Vous pouvez le faire cependant:

List<String> list = Arrays.asList("a","b","c");

Comme asList peut prendre des arguments "vararg".

Votre question est pourquoi l'un fonctionne et l'autre non, non?

Eh bien, la raison en est que {"a","b","c"} n'est pas une expression valide Java , et donc le compilateur ne peut pas l'accepter.

Ce que vous semblez impliquer, c'est que vous voulez passer un initialiseur de tableau sans fournir expression de création de tableau complet (JLS 15.10).

Les expressions de création de tableau correctes sont, comme d'autres l'ont souligné:

String[] array = {"a", "b", "c"};

Comme indiqué dans JLS 10.6 Array Initializers , ou

String[] array = new String[]{"a", "b", "c"};

Comme indiqué dans JLS 15.10 Array Creation Expressions .

Cette seconde est utile pour l'inlining, vous pouvez donc la passer directement à la place d'une variable de tableau.

Étant donné que la méthode asList dans Arrays utilise des arguments variables et que les expressions d'arguments variables sont mappées sur des tableaux, vous pouvez soit passer un tableau en ligne comme dans:

List<String> list = Arrays.asList(new String[]{"a", "b", "c"});

Ou passez simplement les arguments variables qui seront automatiquement mappés à un tableau:

List<String> list = Arrays.asList("a","b","c");
13
Edwin Dalorzo

Tu peux essayer

List<String> list = Arrays.asList(new String[] {"a","b","c"});
10
user219882