Escolha de método

8 respostas
evertonsilvagomesjav

Com que critério a JVM escolhe qual método passar um "null" ?

public static void main(String[] args) {
		

		go(null);
		
	}
	
	static void go(Object o){
		System.out.println("object");
	}
	static void go(Integer o){
		System.out.println("integer");
	}
	static void go(Number o){
		System.out.println("number");
	}

8 Respostas

quikkoo

se ñ me engano neste caso o compilador acusa uma ambiguidade, da erro e ñ compila

luiz_renato

Rapaz,

Testei e compila mas tbm não sei porque deu o resultado.

Luiz Renato

evertonsilvagomesjav

Compila sim, agora não sei os critérios que a JVM escolheu o método com Integer.

E

Ele escolheu o método mais específico (porque Object -> Number -> Integer). Mas se você também tivesse um método que recebesse um java.lang.Double, teria uma ambiguidade, porque tanto Object -> Number -> Integer quanto Object -> Number -> Double teriam o mesmo “grau de especificidade”.

evertonsilvagomesjav

Falouu e disse!!!

quikkoo

fiz o teste aqui, cheguei a conclusão que o entanglement disse, existe uma hierarquia entre as 3 classes, daí ele escolheu o tipo mais específico, mas eu ñ sabia dessa, já havia acontecido isso cmg mas eram com classes em que ñ havia uma hierarquia

flw, t+

deyvid

Valeu evertonsilvagomesjava estas foi uma grande contribuição

ViniGodoy

Se alguém estiver curioso, leiam:
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.12.2

Mas é, em geral, uma boa prática não confiar no Java em situações desse tipo. A especificação do Java em relação ao que é “mais específico” não é muito clara e, embora tenha sido revisada após a inclusão dos generics, ainda pode ser ambígua entre VMs diferentes.

Criado 16 de agosto de 2010
Ultima resposta 17 de ago. de 2010
Respostas 8
Participantes 6