首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用KotlinPoet生成“`by lazy”

如何使用KotlinPoet生成“`by lazy”
EN

Stack Overflow用户
提问于 2018-07-02 08:41:33
回答 1查看 614关注 0票数 1

我想生成这样的代码:

代码语言:javascript
复制
class B private constructor() : A {

    companion object {
        val instance: B by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
            B()
        }
    }
}

使用KotlinPoet:

代码语言:javascript
复制
private fun genCompanionObject() = TypeSpec.companionObjectBuilder()
        .addProperty(PropertySpec.builder("instance", A::class.java).build()).build()

如何生成by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED)?我在文档中找不到一些有用的API。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-02 08:44:37

您正在寻找PropertySpec.Builder.delegate方法。您提供了一个CodeBlock,表示表示委托的初始化程序。

特别针对您想要的代码:

代码语言:javascript
复制
.delegate(CodeBlock.builder()
    .beginControlFlow("lazy(mode = %T.SYNCHRONIZED)", LazyThreadSafetyMode::class.asTypeName())
    .add("B()") // Or however you want to implement this
    .endControlFlow()
    .build())
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51132110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档