我已经使用 创建了一个集合Collections.synchronizedSet<T>(mutableSetOf<T>())
。它
SynchronizedSet
有自己的 (synchronized) 实现forEach
,与 (not synchronized) 提供的实现不同Iterable.forEach
,但是 Kotlin 的Iterable.forEach
实现带有注释@HidesMembers
,因此它会被调用而不是同步的实现。
我如何恢复的同步版本forEach
?
您
forEach
正在寻找的是java.lang.Iterable
接口上的一种方法,因此转换将起作用。一个(相当丑陋的)例子:
IDEA 调试器在以下位置命中预期代码
SynchronizedCollection.forEach
:我想出了自己的解决方案,它看起来比@david-soroko 提出的解决方案更清晰一些。
这里的要点是,它
Iterable.forEach
接受一个Consumer
,而 KotlinforEach
接受一个 lambda 表达式,并明确地将Consumer
解析结果传递给 javaforEach
。而且,只需更改为
forEach
,javaForEach
看起来就比总是强制类型转换更简洁。