[Resolvido]Overloaded

Olá pessoal,

Estou estudando para a certificação OCJP e me deparei com um cenário bem interessante.

public class AutoBoxingArg {
	
	public static void main(String[] args) {
		int b = 1;
		doSomething(b);
		doSomething(b,b); // não compila
	}
	
	public static void doSomething(Integer i, Integer _i) {
		System.out.println("Integer|Integer " + i);
	}
	
	public static void doSomething(int i, Integer _i) {
		System.out.println("int|Integer " + i);
	}
	
	public static void doSomething(Integer i) {
		System.out.println("Integer " + i);
	}
	
	public static void doSomething(int i) {
		System.out.println("int " + i);
	}

}

Porque posso ter um método sobrecarregado com um argumento Wrapper e o outro primitivo mas não posso ter o mesmo cenário com dois argumentos, o compilar reclama dizendo que o método doSomething(Integer i, Integer _i) é ambiguo?

Grato.

Obviamente não irá compilar, já que você não possuí um método que sobrescreve recebendo dois primitivos como parametro…

Adicione este método e funcionará:

public static void doSomething(int i,int _i)
{
   //Implementação...
}

Não acho tão obvio assim, visto que alguém poderia deduzir que haveria alguma espécie de autoboxing nessa situação.

Porém acho que o compilador não tem uma ordem de precedência nesse caso específico, como os 2 são válidos, ele não saberia qual invocar. Tanto que se os 2 forem Integer, ou o primeiro int e o segundo Integer, ele compila.

Esse artigo responde minha dúvida.

http://radio.javaranch.com/corey/2004/08/19/1092931618000.html

Valeu ai gente.

Abs.