Lazy接口的例子

小张哥
2024-04-07 / 0 评论 / 13 阅读 / 正在检测是否收录...
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 方法。

0

评论

博主关闭了所有页面的评论