Type Erasure and Overloading in Java: ¿Por qué funciona esto?
Tengo el siguiente código
public class Pair< T, U > {
public T first;
public U second;
}
public class Test {
public int method( Pair< Integer, Integer > pair ) {
return 0;
}
public double method( Pair< Double, Double > pair ) {
return 1.0;
}
}
Esto realmente compila y funciona como cabría esperar. Pero si los tipos de retorno son iguales, esto no se compila, con el esperado "choque de nombres: método (Par) y método (Par) tienen el mismo borrado"
Dado que el tipo de retorno no es parte de la firma del método, ¿cómo es posible esta sobrecarga?