如何在 Kotlin 中匿名传递委托属性



让我们假设一个简单的类:

class Foo(val p:String)

我想通过传递惰性委托来创建类的实例:

val lazyP by lazy {"foo"}
println(Foo(lazyP).p)

但我不需要lazyP变量的样板文件。如何写单行本?像这样:

println(Foo(by lazy {"foo"}).p)
我认为

您要做的是构造Foo并且仅在首次调用时p计算?如果是这样,我认为像您所做的那样定义Foo是行不通的,因为当您构造Foo时,会调用惰性委托。这是因为为了构造Foo,需要一个字符串,所以惰性委托在这一点上被计算。换句话说,这个:

val lazyP by lazy { "foo" }
val foo = Foo(lazyP)

或多或少等同于:

val foo = Foo("foo")

我认为如果你想Foo有一个惰性的委托属性,你应该这样定义它:

class Foo(lazyP: Lazy<String>) {
    val p by lazyP
}

然后,您可以在单行中构造它,而无需单独的变量:

val foo = Foo(lazy { "foo" })

最新更新