Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Predicates

Pessoal,

No vídeo o query.where é exibido da seguinte forma: query.where((Predicate[]) predicates.toArray());

No texto o query.where é exibido da seguinte forma: query.where((Predicate[]) predicates.toArray(new Predicate[0]));

A forma que funciona é a da segunda opção. Só que eu não entendi, porque tenho que passar esse new Predicate[0]. Alguém pode me explicar?

Desde já obrigado.

4 respostas

Oi Daniel,

a forma correta realmente a segunda:

query.where(predicates.toArray(new Predicate[0]));

E aqui você pode ver uma bela gambiarra do mundo Java :)

O método toArray() - sem params - devolve um array de objetos: Object[]

Object[] array = predicates.toArray();

Isso não queremos, seria genérico demais. Queremos um array de Predicate[] e por isso devemos passar para o um método toArray um novo array do tipo que desejamos receber:

Predicate[] array = predicates.toArray(new Predicate[0]);

Ou seja, o parâmetro new Predicate[0] só existe para devolver o tipo correto!

Tudo bem?

abs

A parte do método toArray() - sem params - devolver um array de Object[], sem problemas. Ok.

Agora a segunda parte, eu queria entender um pouco mais. Como ele faz para retornar esse Array de Predicate, se passo um array de tamanho 0 (zero)?

Eu estou chamando o método toArray(), que inicialmente me devolveria um array de Object[].

Porém como estou passando como parâmetro um Array de Predicate de tamanho 0 (zero), ele aproveita esse Array que passo por parâmetro, popula o mesmo já fazendo o CAST de Object para Predicate. E aí devolve o array?

É isso?

Desde já obrigado.

Oi Daniel,

esse Array de Predicate de tamanho 0 (zero) não é utilizado para popular o retorno, serve apenas para definir o tipo. É uma gambiarra sem tamanho :)

abs

solução!

Ta certo, obrigado Nico.