Estou precisando de uma ajuda para entender melhor a ordem em que a JVM chama os métodos sobrecarregados de uma classe, sendo que estes métodos possuem argumentos de tipo primitivo, de tipo Wrapper e var-args.
Fiz um código de teste, e vi que a JVM chama nessa ordem: Tipo primitivo ----> Classes Wrapper -----> Var-args. A ordem é essa mesma?
public class A {
void go(int x) {
System.out.print("argumento de tipo primitivo int");
}
void go(long x) {
System.out.println("argumento de tipo primitivo long");
}
void go(int... x) {
System.out.println("argumento de tipo primitivo int com var-args");
}
void go(long... x) {
System.out.println("argumento de tipo primitivo long com var-args");
}
void go(Integer x) {
System.out.print("argumento de tipo Integer");
}
void go(Long x) {
System.out.print("argumento de tipo Long");
}
void go(Integer... x) {
System.out.print("argumento de tipo Integer com var-args");
}
void go(Long... x) {
System.out.print("argumento de tipo Long com var-args");
}
public static void main(String[] args) {
A a = new A();
a.go(10);
}
}
Obs: Quando comentei os métodos void go(int x), void go(long x) e void go(Integer x) obtive o seguinte erro de compilação: The method go(int[]) is ambiguous for type A. Alguém pode me ajudar?