Eu tenho um método que ésobrecarregado várias vezes mudando sua assinatura. Tenho tambem uma lista de object. Como faço para saber qual metodo sera chamado? Segue exemplo do problema ...
import java.util.ArrayList;
import java.util.List;
public class Teste {
/**
* @param args
*/
public static void main(String[] args) {
List<Object> l = new ArrayList<Object>();
l.add(new String("Puta que o pariu"));
l.add(2);
l.add(new Bla(){public String toString(){return "Caralho";}});
for (Object object : l) {
print(object);
}
}
static class Bla {}
public static void print(Object s) {
print((String) s);
}
public static void print(String s) {
System.out.println(s);
}
public static void print(Integer s) {
System.out.println("Imprimindo um numero");
}
public static void print(Bla s) {
System.out.println(s.toString());
}
}
No exemplo, um erro sera gerado em runtime pq ele não conseguir converter Object para Integer, tendo em vista que ele sempre chama o método que usa o Object como parametro.
Resumindo ele não olha para a instância, ele sempre olha para a assinatura do método e para o tipo declarado da variável.