Erro em parametro String - Resolvido

public void enviarEmailHTML(String… emails, String assunto, String mensagem) throws EmailException {
this.htmlEmail.addTo();
this.htmlEmail.setSubject(assunto);
this.htmlEmail.setHtmlMsg(mensagem);
this.htmlEmail.setStartTLSEnabled(true);
this.htmlEmail.send();
}

Porque este erro ?

Parâmetros do tipo "…’ (reticências) só podem ser inseridos

  • Quando são o único parâmetro
  • Quando são o último parâmetro

Pois, os mesmos informam ao compilador que o método receberá 0, 1 ou N parâmetros (onde N é um número qualquer, positivo e indeterminado, neste caso, maior que 1).
Das duas uma:

  • Coloca o parâmetro String… emails no final, como último parâmetro
  • Troca o String… emails por String[] emails e trabalha conforme a assinatura do método.

É a mesma definição String… com String[] ?

Não.
O primeiro (String…) está explicado no comentário anterior.
O segundo (String[]) se refere a um vetor unidimensional de Strings

//Criando vetor com 10 posições
String[] emails = new String[10];

Assim sendo, se a tua necessidade é aceitar vários emails, sem ter garantias que irá passar ao menos 1, sugiro a abordagem de colocar este como último dos parâmetros.

Basicamente, este tipo de assinatura permite isso:

public class Foo {
    public void metodoAceitaIndefinido(String... palavras) {
        //Faz qualquer coisa
    }
}

//Em outro lugar do universo do teu projeto
Foo foo = new Foo();
foo.metodoAceitaIndefinido("arroz", "cebola", maracujá");
//ou
foo.metodoAceitaIndefinido();
//ou
foo.metodoAceitaIndefinido("Método difícil, hein?");

Sem apresentar problemas (a não ser que dentro do método haja algo que exija parâmetros, porém, aí essa assinatura não é a mais indicada.

Entendeu?

Entendi.

Neste caso o minimo é um e-mail, podendo ser N emails para o sistema enviar.

Entendi que devo utilizar o **String… emails"", como ultimo parâmetro de entrada.

Recomendo a leitura https://docs.oracle.com/javase/8/docs/technotes/guides/language/varargs.html

Resumindo

  • Varargs facilita a passagem de parâmetro literal
  • O argumento para o varargs podem ser 0 ou infinitos

Obs: O Varargs é super conjunto de um array normal, faz tudo que o um array normal faz com alguns recursos a mais (Use com sabedoria)

1 curtida

Entendi @Hyagomvale, por isto optei por utilizar este tipo…

Mas vou ler este documento que você enviou.