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