Criei um conjunto usando Collections.synchronizedSet<T>(mutableSetOf<T>())
.
SynchronizedSet
que tem sua própria implementação de forEach
(synchronized) que difere daquela fornecida por Iterable.forEach
(not synchronized), no entanto, o do Kotlin Iterable.forEach
é anotado com @HidesMembers
, então ele é chamado em vez do synchronized.
Como faço para recuperar a versão sincronizada do forEach
?
O que
forEach
você está procurando é um método najava.lang.Iterable
interface para que a conversão funcione.Um exemplo (bem feio):
O depurador IDEA atinge o código esperado em
SynchronizedCollection.forEach
:Eu criei minha própria solução, que parece um pouco mais limpa do que a proposta por @david-soroko.
O ponto principal aqui é que o
Iterable.forEach
Kotlin usa umConsumer
, o do KotlinforEach
usa um lambda e passa explicitamente asConsumer
resoluções para o javaforEach
.E mudar
forEach
parajavaForEach
parece mais limpo do que sempre fazer casts.