Duvida código

12 respostas
F

ola galera ,nao entendi bem o erro aqui!!alguem sabe pq?
isso acontece?

public class Classe12Planeta{
   static void nibiru(int...d){
          System.out.println(" int... ");
        
    }
  static void nibiru(Number...f){
          System.out.println("number...  ");
        
    }

    public static void main(String argc[]){
     
        byte l=9,h=5;
         nibiru(l,h);//erro!
        
    }

}
será que compilador ficou confuso?e nao sabe quem como casar o método?
se fazer ampliacao com varg args…?ou usar o number com varg…args?
qualquer coisa ajuda,valeu!!

12 Respostas

ViniGodoy

E quem vc espera que ele chame? O método com uma lista de int ou com uma lista de Number?

Para ambos isso seria possível. Se o compilador fizer autoboxing do byte para Byte, ele poderia chamar o método com Number. Se não fizer, pode usar o com int.

Então, sua assinatura é mesmo ambígua. Para o Java, não cabe ao compilador decidir esse tipo de coisa.

F

ViniGodoy:
E quem vc espera que ele chame? O método com uma lista de Integer ou com uma lista de Number?

Para ambos isso seria possível. Se o compilador fizer autoboxing do byte para Byte, ele poderia chamar o método com Number ou com Integer.
Então, sua assinatura é mesmo ambígua.

isso mesmo entao!!valeu!!

LPJava

bom com o Number nao pode acontecer… pq vc nao pode ampliar de um tipo primitivo para qualquer tipo wrapper por exemplo de int para Long nao existe isso…
Agora em respeito ao seu byte… nao sei pq nao foi… byte… sempre umas regrinhas que esqueço…

flw!

celso.martins

Amigo, tirei os 3 pontos do primeiro método e funcionou.

Para que servem esses pontos entre a classe e o objeto?

F

celso.martins:
Amigo, tirei os 3 pontos do primeiro método e funcionou.

Para que servem esses pontos entre a classe e o objeto?

tranquillo cara, esses tres pontos sao chamados em java de varg-args
ou seja estao a dizer que seu metodo pode receber n valores,
vc pode chamar nibiru(2) como nibiru(3,5) como nibiru(2,4,6,7) e por ai vai…
flw!

celso.martins

fabioEM:
celso.martins:
Amigo, tirei os 3 pontos do primeiro método e funcionou.

Para que servem esses pontos entre a classe e o objeto?

tranquillo cara, esses tres pontos sao chamados em java de varg-args
ou seja estao a dizer que seu metodo pode receber n valores,
vc pode chamar nibiru(2) como nibiru(3,5) como nibiru(2,4,6,7) e por ai vai…
flw!

Putz… não sabia disso… favoritado… ia ser difícil procurar isso no google (até tentei). Java 3 pontos nos parâmetros do método. =)

Como usa os parâmetros passados? Como no args do main? Através de array?

Vlw pela explicação!!

F

celso.martins:
fabioEM:
celso.martins:
Amigo, tirei os 3 pontos do primeiro método e funcionou.

Para que servem esses pontos entre a classe e o objeto?

tranquillo cara, esses tres pontos sao chamados em java de varg-args
ou seja estao a dizer que seu metodo pode receber n valores,
vc pode chamar nibiru(2) como nibiru(3,5) como nibiru(2,4,6,7) e por ai vai…
flw!

Putz… não sabia disso… favoritado… ia ser difícil procurar isso no google (até tentei). Java 3 pontos nos parâmetros do método. =)

Como usa os parâmetros passados? Como no args do main? Através de array?

Vlw pela explicação!!

E bem interessante mesmo, mas essa alteracao se nao me engano foi feita desde o java 5.0.Os anteriores nao possuiam esse novo recurso.
Agora em baixo nivel nao sei te dizer se o compilador cria um array ou uma lista ,realmente nao pesquisei!!

celso.martins

Vlw pelos esclarecimentos!
Vou pesquisar mais sobre o assunto!
Muito interessante mesmo essa geringonça.

ViniGodoy

Basicamente um método assim:

public void imprime(String ... textos) {
   for (String item : textos) {
       System.out.println(item);
   }
}

... 

imprime("Vinícius", "Godoy");

Funciona pq ele é convertido nisso aqui:

public void imprime(String[] textos) {
   for (String item : textos) {
       System.out.println(item);
   }
}

imprime(new String[] {"Vinícius", "Godoy"});
ViniGodoy

Isso também permite escrever o main assim:

public static void main(String ... args) { //Isso é um main válido! }

celso.martins

ViniGodoy:
Isso também permite escrever o main assim:

public static void main(String ... args) { //Isso é um main válido! }

É. Então, realmente é convertido num array. Muito legal isso.

Vlw Vini!

LPJava

E bem interessante mesmo, mas essa alteracao se nao me engano foi feita desde o java 5.0.Os anteriores nao possuiam esse novo recurso.

sim a partir da versao 1.5… os vargs estão disponiveis… realmente show de bola esse recurso… cuidado que o codigo abaixo nao compila

void metodo(int ...a){}
void metodo(int[]a){}

so para reforçar o recurso!
flw!

Criado 9 de novembro de 2007
Ultima resposta 9 de nov. de 2007
Respostas 12
Participantes 4