Pessoal, estava dando uma estudada em overloading utilizando var-args e autoboxing.
Modifiquei um exemplo do livro da Kathy e tive um resultado que não esperava:
[code]class TesteOverloading5BoxVarArg {
static void wide_var_arg(long … x) {System.out.print(“long …”);}
static void wide_var_arg(Integer … x) {System.out.print(“Integer …”);}
public static void main (String [] args) {
int i = 5;
wide_var_arg(i,i);
}
}[/code]
Obtive como resultado da compilação:
TesteOverloading5BoxVarArg.java:8: reference to wide_var_arg is ambiguous, both
method wide_var_arg(long...) in TesteOverloading5BoxVarArg and method wide_var_a
rg(java.lang.Integer...) in TesteOverloading5BoxVarArg match
wide_var_arg(i,i);
^
Ou seja, o compilador não sabe qual dos métodos utilizar. Eu pensava que tinhamos Widen->Box, assim o método com o parâmetro long… seria chamado.
Não lembro de ter visto no livro questões desse tipo. Isso pode cair desta forma na certificação ?
Pelo que vi nesses métodos a sequência de escolha do compilador é:
Ampliar o tipo primitivo
Usar um método que aceita Wrapper correspondente ao tipo
Usar um método que aceita um Number
Usar um método que aceita um Object
Finalmente, usar varargs.
Do mais específico ao mais genérico… sendo a última opção um tanto frágil no sentido da não correspondência/ambiguidade… Ótimo ponto para se ferrar na prova.
Caraca George… que avatar legal !!! Conhece a técnica POG ? De frases como a abaixo…
cara tenha certeza caiu na minha porem 1 questao sim… os recursos novos do java 5 foram abordados todos, no minimo 2 questoes de cada… esse ai so teve 1 e ele envolveu todas as regras para saber qual ia chamar… claro entao tem q lebrar a ampliacao tem maior prioridade que qualquer outro novo recurso var-args e autoboxing… caiu bem semalhante ao q tem no cap 3 da kathy no objetivo 1.4 - sobrecarregando.
Nao entendi muito bem por que a confusao do compilador, se alguem puder explicar ( denovo ) de outro jeito.
Quando vi o código achei que ele fosse usar o método que chama o wrapper Integer.