Si je déclare seulement les 2 méthodes varargs comme suit:En Java, pourquoi l'appel foo() n'est-il pas ambigieux étant donné 2 méthodes varags foo (int ... ints) et foo (Object ... objects)?
public void foo(String... strings) {
System.out.println("Foo with Strings");
}
et
public void foo(int... ints) {
System.out.println("Foo with ints");
}
et ensuite le code:
foo();
ceci est une erreur de compilation en raison de l'ambiguïté comme prévu.
Cependant, si je seulement les 2 versions suivantes de foo:
public void foo(Object... objects) {
System.out.println("Foo with Objects");
}
et
public void foo(int... ints) {
System.out.println("Foo with ints");
}
alors le code
foo();
appelle la version ints de la méthode. Quelqu'un peut-il expliquer pourquoi le second exemple n'est pas ambigu de même et pourquoi il résout à la méthode int sur la méthode Object. Merci.
Vous n'avez pas montré les appels à foo, sans lesquels cette question est difficile à répondre. –
Jon, l'appel à foo() est littéralement foo() c'est-à-dire avec zéro argument. Je vais éditer la question pour la rendre plus claire. – mikej
Avec * just * int ... et objet ..., cela compile pour moi. Avec String ... et int ... (mais pas Object ...) ce n'est pas le cas. Pourriez-vous vérifier la question s'il vous plaît? –