7
votes

Appeler la méthode Varargs Les éléments de mélange et une gamme d'éléments ne fonctionnent pas

J'ai une méthode avec la signature suivante:

foo("Peter", new String[] { "John" });


0 commentaires

5 Réponses :


2
votes

C'est parce que, en fait, vous essayez de transmettre une chaîne contenant une chaîne et un autre tableau.


0 commentaires

9
votes

du Docs :

Les trois périodes après la finale Le type de paramètre indique que le L'argument final peut être passé en tant que Array ou comme une séquence d'arguments.

Vous ne pouvez pas passer un argument et un tableau.


1 commentaires

Et c'est une bonne chose que vous ne pouvez pas. Depuis Java5, les règles de résolution de méthodes sont déjà devenues trop délicates lorsque l'autoboxage, les varargs et les tableaux entrent en jeu.



0
votes

Parce que ce n'est pas la même chose. Vous ne pouvez tout simplement pas mélanger et correspondre comme ça. Le non valide dans votre exemple fonctionnerait avec une signature de fonction comme celle-ci:

public void foo(String head, String ... tail)


0 commentaires

0
votes

Cette méthode xxx

est juste une version de commodité de celui-ci: xxx

et, par conséquent, vous pouvez l'appeler avec un numéro de variable des chaînes (qui seront converties en une matrice à chaîne par le compilateur) ou un tableau à chaîne, mais une combinaison ne fonctionnera pas, par conception.


0 commentaires

0
votes

pense à cela. Et si vous aviez une méthode comme celle-ci: xxx

et essayé de l'appeler comme ceci: xxx

si l'objet ] dans la deuxième position soit traité comme un seul objet dans l'appel de varargs ou doit-il être "étendu"? Cela conduirait à un comportement très déroutant.


0 commentaires