延迟扩展属性变通方法

假设你要创建一个计算成本很高的扩展属性。因此,你希望通过使用惰性属性委托来缓存计算并引用当前实例(this),但你不能这样做,如 Kotlin 问题 KT-9686KT-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) }