J'ai une méthode avec la signature suivante:
foo("Peter", new String[] { "John" });
5 Réponses :
C'est parce que, en fait, vous essayez de transmettre une chaîne contenant une chaîne et un autre tableau. P>
du Docs : p>
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 em> strong> comme une séquence d'arguments. p> blockQuote> Vous ne pouvez pas passer un argument et strong> un tableau. P>
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.
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)
Cette méthode est juste une version de commodité de celui-ci: p> 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. p> p>
pense à cela. Et si vous aviez une méthode comme celle-ci: et essayé de l'appeler comme ceci: p> si l'objet ] code> dans la deuxième position soit traité comme un seul objet
code> dans l'appel de varargs ou doit-il être "étendu"? Cela conduirait à un comportement très déroutant. P> p>