让我们假设一个简单的类:
class Foo(val p:String)
我想通过传递惰性委托来创建类的实例:
val lazyP by lazy {"foo"}
println(Foo(lazyP).p)
但是我不需要样板lazyP
变量。如何写单线?像这样:
println(Foo(by lazy {"foo"}).p)
答案 0 :(得分:1)
我想您要尝试的是构造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" })