import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
class CustomLazy<T>(private val initializer: () -> T) : Lazy<T>,ReadOnlyProperty<Any?,T> {
private var value2:T?= null
private var isInitialized: Boolean = false
override val value: T
get() = getValue(null,this::value2)
override fun isInitialized(): Boolean {
return isInitialized
}
override fun getValue(thisRef: Any?, property: KProperty<*>): T {
if (!isInitialized){
value2 = initializer()
isInitialized = true
}
return value2!!
}
}
fun main() {
val lazeValue = CustomLazy{
println("computed!")
"Hello"
}
println(lazeValue.value)
println(lazeValue.value)
}
this::value2 是 Kotlin 中的一种引用属性的方式。在这个表达式中,this 表示当前对象,::value2 表示获取属性 value2 的引用。
在 Kotlin 中,:: 符号用于创建对函数、属性或类的引用。对于属性,:: 后跟属性的名称,表示获取该属性的引用。在这种情况下,this::value2 表示获取当前对象(即实例化 CustomLazy 类的对象)的 value2 属性的引用。
因此,this::value2 表示获取当前对象的 value2 属性的引用。这个引用可以用于传递给其他函数,或者在代码中使用。在上述代码中,getValue 方法中的 property 参数需要一个 KProperty 的引用,所以我们使用 this::value2 来获取 value2 属性的引用,并将其作为 property 参数传递给 getValue 方法。
评论