Duvida chamda de métodos.[RESOLVIDO]

3 respostas
evertonsilvagomesjav
public static void main(String[] args) {   
  
int[] numeros = {1,2,3};   
teste(new Integer[2]);   
teste(numeros);
public static void teste (Object numero){
		
		System.out.println("object");
	} 


public static void teste (Object...numero){   
           
        System.out.println("varargs object");   
    }

Bom pelo que eu aprendi os métodos com varargs são a ultima opção em prioridades, porque o metodo que passa um wrapper Integer chama o método varags e o int segue a regra e chama somente o que possui um Object?

3 Respostas

gpd38

Qual a sua duvida.

Fiz um teste aqui e isso funciona.
public class Chamar_Metodo {

    public static void main(String args[]) {
        int[] n = {1, 2, 3, 4, 5};

        Metodo01(n);
        System.out.println("\n");
        Metodo01(n[2]);
    }

    private static void Metodo01(int[] n) {
        System.out.println("Vetor");
        for (int i = 0; i < n.length; i++) {
            System.out.print(n[i] + " ");
        }
    }

    private static void Metodo01(int i) {
        System.out.println("Inteiro");
        System.out.println(i);
    }
}
B

Não tem essa de ultima opção em prioridades, o compilador acha exatamente qual é a opção mais específica. Caso o compilador ache que as duas são as mesmas, há ambiguidade, e ele dá um erro de compilação.

Sobre o teu problema, é simples:

int[] não é um array de objetos, é um array de tipo primitivo, portanto ele não vai entrar em Object[](ou Object… que é a mesma coisa). Java não realiza autoboxing de primitivos neste caso. int[] cai em Object por que um array é um Object.

Integer[] por sua vez tem duas opções para escolher, Object e Object[]. A opção mais específica que compila sem erros é Object[], portanto o compilador escolhe ela.

evertonsilvagomesjav

humm brigadao Bruno.

Criado 26 de novembro de 2009
Ultima resposta 26 de nov. de 2009
Respostas 3
Participantes 3