Se dichiaro metodi solo i 2 varargs come segue:In Java, perché è il foo call() non ambigua dato 2 varags metodi foo (int ... int) e foo (Object ... gli oggetti)?
public void foo(String... strings) {
System.out.println("Foo with Strings");
}
e
public void foo(int... ints) {
System.out.println("Foo with ints");
}
e poi il codice:
foo();
questo è un errore di compilatore causa dell'ambiguità come previsto.
Tuttavia se ho solo i seguenti 2 versioni di pippo:
public void foo(Object... objects) {
System.out.println("Foo with Objects");
}
e
public void foo(int... ints) {
System.out.println("Foo with ints");
}
quindi il codice
foo();
chiama la versione int del metodo. Qualcuno può spiegare perché il secondo esempio non è allo stesso modo ambiguo e perché si risolve con il metodo int rispetto al metodo oggetto. Grazie.
Non hai mostrato le chiamate a pippo, senza le quali questa domanda è difficile da rispondere. –
Jon, la chiamata a foo() è letteralmente foo() cioè con zero argomenti. Modificherò la domanda per renderla più chiara. – mikej
Con * solo * int ... ed oggetto ..., questo compila per me. Con String ... e int ... (ma non Object ...) no. Potresti controllare la domanda per favore? –