Si lo declaran los métodos de sólo el 2 varargs de la siguiente manera:En Java, ¿por qué la llamada foo() no es ambigua dado 2 métodos de varags foo (int ... ints) y foo (objeto ... objetos)?
public void foo(String... strings) {
System.out.println("Foo with Strings");
}
y
public void foo(int... ints) {
System.out.println("Foo with ints");
}
y luego tener el código:
foo();
esto es un error del compilador debido a la ambigüedad como se esperaba.
Sin embargo, si sólo tengo las 2 versiones siguientes de foo:
public void foo(Object... objects) {
System.out.println("Foo with Objects");
}
y
public void foo(int... ints) {
System.out.println("Foo with ints");
}
luego el código
foo();
llama a la versión enteros del método. ¿Alguien puede explicar por qué el segundo ejemplo no es similarmente ambiguo y por qué se resuelve en el método int sobre el método Object? Gracias.
No ha mostrado las llamadas a foo, sin las cuales esta pregunta es difícil de responder. –
Jon, la llamada a foo() es literalmente foo(), es decir, con cero argumentos. Editaré la pregunta para aclarar esto. – mikej
Con * solo * int ... y objeto ..., esto compila para mí. Con String ... e int ... (pero no Object ...) no es así. ¿Podrías verificar la pregunta por favor? –