延迟扩展属性变通方法
假设你要创建一个计算成本很高的扩展属性。因此,你希望通过使用惰性属性委托来缓存计算并引用当前实例(this
),但你不能这样做,如 Kotlin 问题 KT-9686和 KT-13053 中所述 。但是,此处提供了正式的解决方法。
在示例中,扩展属性为 color
。它使用了一个明确的 colorCache
,它可以与 this
一起使用,因为不需要 lazy
:
class KColor(val value: Int)
private val colorCache = mutableMapOf<KColor, Color>()
val KColor.color: Color
get() = colorCache.getOrPut(this) { Color(value, true) }