Como entender referência de método em Java8 ao usar BiConsumer

votos
1

Eu tenho um código de exemplo como abaixo, posso escrevê-lo e saber o que ele vai trabalhar como. Mas eu ainda tenho alguma dificuldade em entender o que java tinha que converter algo usando :: a um método típico.

.collect(ConcurrentHashMap::newKeySet,Set::add,Set::addAll)

O primeiro parâmetro é Supplier<R> supplier, eu posso entender isso como há uma instância Fornecedor que get()método tem a mesma aplicação com ConcurrentHashMap::newKeySet.

O segundo e terceiro parâmetro são 'BiConsumer', se eu usar a expressão lambda, vou escrever algo como (a,b)->a.add(b). quando eu escrevi Set::add, como eles sabem converter primeiro parâmetro a configurar e depois invocar o add()método nele.

Definição de BiConsumer é um método simples, com dois parâmetros.

Se houver algum tipo, eu não vai se sentir difícil de entender:

Set<String> set = new HashSet<>();
Consumer<String> consumer = set::add;

Eu só não consigo entender como eles sabem para chamar o método add no primeiro parâmetro.

Publicado 20/09/2018 em 04:16
fonte usuário
Em outras línguas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more