Я предполагаю, что вы пытаетесь создать 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" })