Sintaxe - Objeto como parâmetro sem necessidade de declaração prévia? [Resolvido]

2 respostas
K

Prezados,

Talvez não tenha encontrado a resposta por não saber extamente o que pesquisar. Não sei que "nome" usar para a dúvida.
Segue um exemplo conceitual:

...
AlgumaCoisa algumaCoisa = new AlgumaCoisa();
algumaCoisa.p1(123);
algumaCoisa.p2 = "abc";
algumaCoisa.p3();

UsaCoisa.Coisa(algumaCoisa);
...

Ao invés do acima utilizar algo similar ao seguinte:

...
UsaCoisa.Coisa(new AlgumaCoisa() {
	.p1(123);
	.p2 = "abc";
	.p3();
});
...

Ou seja, passar um objeto como parâmetro - setando/usando valores - sem a necessidade de criar uma referência prévia para o objeto.

2 Respostas

ViniGodoy
A sintaxe não é exatamente assim. E sim, assim:
UsaCoisa.Coisa(new AlgumaCoisa()
    .p1(123)   
    .p2("abc")   
    .p3();   
);

O nome disso é invocation chaining. O segredo para usar essa técnica é fazer os métodos void retornarem this. Nesse caso, como o método retorna o próprio objeto, vc pode chamar novamente outro método do objeto sobre o retorno.

Mas note que você tem sim, uma instância, já que vc deu new.

Exemplo:

public class AlgumaCoisa {
   private int numero;
   private String texto;

   public AlgumaCoisa p1(int numero) {
      this.numero = numero;
      return this;
   }
   public AlgumaCoisa p2(String abc) {
      this.texto = abc;
      return this;
   }
   public AlgumaCoisa p3() { 
      System.out.println(abc + ":" + num);
      return this;
   }

   public static void main(String[] args) {
      new AlgumaCoisa().p1(20).p2("Idade").p3();
   }
}
K

Excelente, agradecido.

O único ponto negativo (não da resposta, mas do Java) é que os métodos devem ser especificamente criados pensando em invocation chaining - não há possibilidade de utilização em classes anônimas, genéricas.

Criado 11 de abril de 2011
Ultima resposta 12 de abr. de 2011
Respostas 2
Participantes 2