Fala pessoal. Estou com uma dúvida danada quanto ao uso do overload em conjugado com as situações: [widening], [Autoboxing] e [Var-args].
Porém, estive revisando o livro de kathy sierra, voltado para o exame (310-055) e peguei o seguinte exemplo:class Vararg {
static void wide_vararg(long... x) { System.out.println("long..."); }
static void box_vararg(Integer... x) { System.out.println("Integer..."); }
public static void main(String [] args) {
wide_vararg(5,5); // needs to widen and use var-args
box_vararg(5,5); // needs to box and use var-args
}
}
long... Integer...Como o assunto tratado é sobre overload, a idéia seria manter o mesmo nome do método modificando a sua assinatura, no caso a lista de argumentos, justificando corretamente o seu uso. Visando isto, efetuei algumas mudanças no código acima, para que tenha-se o mesmo nome do método e não diferente. Vejam abaixo:
class Vararg {
static void box_vararg(long... x) { System.out.println("long..."); }
static void box_vararg(Integer... x) { System.out.println("Integer..."); }
public static void main(String [] args) {
long a = 3;
long b = 2;
Integer x = 2;
Integer y = 8;
box_vararg(a,b); // needs to widen and use var-args
box_vararg(x, y); // needs to box and use var-args
}
}
box_vararg(x, y); // needs to box and use var-argsem que o compilador alegremente me informa:
The method box_vararg(long[]) is ambiguous for the type VarargSegue abaixo as especificações quanto ao uso do overload avançado, retirados diretamente do livro:
As we can see, you can successfully combine var-args with either widening or boxing. Here's a review of the rules for overloading methods using widening, boxing, and var-args:* Primitive widening uses the "smallest" method argument possible.
* Used individually, boxing and var-args are compatible with overloading.
* You CANNOT widen from one wrapper type to another. (IS-A fails.)
* You CANNOT widen and then box. (An int can't become a Long.)
* You can box and then widen. (An int can become an Object, via Integer.)
* You can combine var-args with either widening or boxing.
Minha preocupação agora seria com as questões do tipo drag-and-drop, em que é quase certa uma coisa típica destas, mas talvez eles abordem juntamente com o uso de generics, sei lá!
Contudo minha dúvida, a princípio baseia-se em como tentar efetuar a compilação e execução do meu código modificado.
