【问题标题】:How to generate `by lazy` using KotlinPoet如何使用 KotlinPoet 生成 `by lazy`
【发布时间】:2018-07-02 08:41:33
【问题描述】:

我想生成这样的代码:

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)?我在document中找不到一些有用的API。

【问题讨论】:

    标签: kotlin kotlinpoet


    【解决方案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())
    

    【讨论】:

    • 你太棒了,我试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多