GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

O que significa "String..."


#1

Eu estava lendo o código fonte da classe ValueItem[i] to AjaxTags e deparei me com a seguinte expressão

public ValueItem(String tagName, boolean asCData, String... value)

O que significa "String..."?

Obrigado pelo seu tempo


#2

olá
String significa um tipo de variável.. no seu caso seria o tipo de variável
de entrada do seu método

Flwss


#3

http://www.guj.com.br/posts/list/32457.java


#4

Essa String com "..." que vc está perguntando é um recurso do Java 5 chamado de var args (na verdade, não lembro como se escreve)

O recurso varargs é bastante útil qdo vamos sobreescrever métodos com a mesma lista de parâmetros.

Supondo que eu tenha três métodos com lista de parâmetros double:

public static void somar(double n1, double n2){
double soma = n1 + n2;
System.out.println(soma);
}
public static void somar(double n1, double n2, double n3){
double soma = n1 + n2 + n3;
System.out.println(soma);
}
public static void somar(double n1, double n2, double n3, double n4){
double soma = n1 + n2 + n3 + n4;
System.out.println(soma);
}

Para executá-los, eu faria da seguinte forma:

public static void main(String[] args) {
Calculadora.somar(2,2);
Calculadora.somar(2,2,3);
Calculadora.somar(2,2,4,3);
}

Repare, que todos os métodos tem a mesma funcionalidade. E é justamente aí que entra o varargs!
Ele permite definirmos um método sem especificar a quantidade de parâmetros passados pra ele...

Substituindo os três métodos por apenas um método usando o varargs, ficaria da seguinte forma:

// Note que aqui temos os mesmos "..." que vc viu naquele método da String
public static void somar(double... numeros ){
double soma = 0;
for (double n: numeros){
soma += n;
}
System.out.println(soma);
}

Deste modo, poderíamos fazer diversas chamadas desse método, passando listas de parâmetros diferentes:
Exemplo:

public static void main(String[] args) {
Calculadora.somar();
Calculadora.somar(2);
Calculadora.somar(2,3);
Calculadora.somar(2,4,3);
Calculadora.somar(2,3,4,5,6,51,43,4);
Calculadora.somar(2,3,4,5,6,51,43,4,2,3,5);
}

#5

Obrigado vtr , entendi perfeitamente , a minha dúvida era mesmo em relação à ... e não à class String. Realmente faz muito sentido usar o .... Antigamente eu usava um array de Strings para conseguir isso.

E já agora , sabe-me explicar isto class Item { e mais tarde aparece isto public class ValueItem extends Item> .

Não o porquê de parametrizar uma classe.

Desde já agradeço


#6

Acho que não entendi sua pergunta...

Você quer saber pra que serve o "" ?


#7

Eu entendo que o significa parametrizar um tipo , eu entendo quando ele é usado assim List ou assim public String funcao(T a). Mas parametrizar uma classe é um pouco estranho .

Para simplificar as coisas ,será que pode me explicar cada palavra das expressões
1.class Item
2.public class ValueItem extends Item>

Por exemplo , na expressão um class é uma palavra reservada que indica que vamos definir uma nova classe , Item é o nome da nova classe , e o ?

Sei que o se refere a genéricos , mas o Item com é que eu não entendo .

Obrigado pelo vosso tempo


#8