Как генерировать `ленивым` с помощью KotlinPoet
Я хочу сгенерировать код следующим образом:
class B private constructor() : A {
companion object {
val instance: B by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
B()
}
}
}
Использование KotlinPoet:
private fun genCompanionObject() = TypeSpec.companionObjectBuilder()
.addProperty(PropertySpec.builder("instance", A::class.java).build()).build()
Как генерировать by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED)
? Я не могу найти некоторые полезные API в документе.
1 ответ
Решение
Вы ищете PropertySpec.Builder.delegate
методы. Вы предоставляете CodeBlock
представляющий инициализатор, который представляет делегат.
Специально для кода, который вы хотите:
.delegate(CodeBlock.builder()
.beginControlFlow("lazy(mode = %T.SYNCHRONIZED)", LazyThreadSafetyMode::class.asTypeName())
.add("B()") // Or however you want to implement this
.endControlFlow()
.build())