Amplificação & AutoBoxing (Mistério) RESPONDIDO

:idea: [size=18]Amplificação & AutoBoxing[/size]

:?: Existe uma precedência sombreada aqui no que diz respeito a Var-args, no entanto o Código Compila ,porque isso acontece ? Ele quebra uma regra da Classes Wrapper e compila sem erros !!!

:shock: Resultado: 4 3

[code]class Detona{
int Foguete(Long x, Long y){return 1;}
int Foguete(Long…x){return 2;}
int Foguete(Integer x,Integer y){return 3;}
int Foguete(Number n, Number m){return 4;}
public static void main(String []args){
new Detona().explode();
}
void explode(){
Short circuito=7;
System.out.print(Foguete(circuito,circuito )+" “);
System.out.println(Foguete(7, 7)+” ");
}}

[/code]

O codigo esta correto, qual o problema?
na primeira chamada vc passa 2 objetos Short como parametro, como não existe nenhum metodo que receba Short, mas sim Number e Short herda de Number, logo…
na segunda vc passa dois literais numericos, que no java SEMPRE são int, logo vai ser chamado o metodo que espera 2 objetos Integer.
qual o problema?

[]´s

[quote=Marcio Duran] :idea: [size=18]Amplificação & AutoBoxing[/size]

:?: Existe uma precedência sombreada aqui no que diz respeito a Var-args, no entanto o Código Compila ,porque isso acontece ? Ele quebra uma regra da Classes Wrapper e compila sem erros !!!

:shock: Resultado: 4 3

[code]class Detona{
int Foguete(Long x, Long y){return 1;}
int Foguete(Long…x){return 2;}
int Foguete(Integer x,Integer y){return 3;}
int Foguete(Number n, Number m){return 4;}
public static void main(String []args){
new Detona().explode();
}
void explode(){
Short circuito=7;
System.out.print(Foguete(circuito,circuito )+" “);
System.out.println(Foguete(7, 7)+” ");
}}

[/code][/quote]
Cara ta tudo certo ai!O compilador em primeiro momento verifica na sequencia,
1)se pode casar o mesmo tipo
2) se nao procura ampliacao ,lembreçe que não vale para wrappers!!
3) se nao procura wrappers
4)se nao procura Number
5)se nao procura Objeto
6) por ultimo procura varg args

[quote=fabioEM]
Cara ta tudo certo ai!O compilador em primeiro momento verifica na sequencia,
1)se pode casar o mesmo tipo
2) se nao procura ampliacao ,lembreçe que não vale para wrappers!!
3) se nao procura wrappers
4)se nao procura Number
5)se nao procura Objeto
6) por ultimo procura varg args [/quote]

:shock: Posso fazer Boxing para amplia-los para Numbers, e isso tem prioridade para metodos Var-args.Ai , vem o compilador vai de encontro pela a regra por procedência e auto-classfica a amplicaficação ou mesmo um boxing simples de int para Integer.

:idea: Esse Java 5, deve ter cerebro !!!

:wink: Correto em suas observações !!!

[quote=jgbt]O codigo esta correto, qual o problema?
na primeira chamada vc passa 2 objetos Short como parametro, como não existe nenhum metodo que receba Short, mas sim Number e Short herda de Number, logo…
na segunda vc passa dois literais numericos, que no java SEMPRE são int, logo vai ser chamado o metodo que espera 2 objetos Integer.
qual o problema?

[]´s
[/quote]

:wink: Concordo mas a forma como o compilador se comporta e algo que não imaginava, ela toma suas decisões por regras e se vale ou não para uma ela classifica a melhor e sai compilando, ao menos nesse caso.