Eu tropecei neste trecho:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, long b) {
System.out.println("In long " + (a + b));
}
public static void printSum(double a, long b) {
System.out.println("In doubleLONG " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Isso resultará em um erro de compilação:
Erro: (15, 9) java: a referência a printSum é ambígua, tanto o método printSum (int, double) no ParamTest quanto o método printSum (long, long) na correspondência do ParamTest
Como isso é ambíguo? Nesse caso, não deve ser promovido apenas o segundo parâmetro, pois o primeiro parâmetro já é um int? O primeiro parâmetro não precisa ser promovido neste caso, certo?
A compilação terá êxito se eu atualizar o código para adicionar outro método:
public static void printSum(int a, long b) {
System.out.println(String.format("%s, %s ", a, b));
}
Deixe-me expandir apenas para esclarecer. O código abaixo resulta em ambiguidade:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, long b) {
System.out.println("In long " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Então este código abaixo também resulta em ambiguidade:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(double a, long b) {
System.out.println("In doubleLONG " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
No entanto, este não resulta em ambiguidade:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, double b) {
System.out.println("In longDBL " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Error:(15, 9) java: reference to printSum is ambiguous both method printSum(int,double) in ParamTest and method printSum(long,long) in ParamTest match
- não é o método ambíguo, é a chamada para o método ambíguo.