延遲擴充套件屬性變通方法

假設你要建立一個計算成本很高的擴充套件屬性。因此,你希望通過使用惰性屬性委託來快取計算並引用當前例項(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) }