计算属性只有一次

时间:2017-06-25 20:42:13

标签: kotlin

给出以下代码

class A
class B {
    val property: A
        get() = A()
}

fun main(args: Array<String>) {
    val b = B()
    println(b.property)
    println(b.property)
}

每次A都会返回一个新的B.property个实例。是否有一种简单的方法可以让它每次都返回相同的实例?

2 个答案:

答案 0 :(得分:2)

您可以简单地使用委托属性lazy,例如:

class B {
    val property by lazy(::A)
}

您也可以使用lambda表达式,如下所示:

class B {
    val property by lazy { A() }
}

答案 1 :(得分:0)

您也可以这样做:

object A
class B {
    val property: A
        get() = A
}

fun main(args: Array<String>) {
    val b = B()
    println(b.property) // >>> A@3cd1a2f1
    println(b.property) // >>> A@3cd1a2f1
}