kotlin - 如何使用 KotlinPoet 生成 `by lazy`
问题描述
我想生成这样的代码:
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 。
解决方案
你正在寻找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())
推荐阅读
- web - 为什么当我们使用方向 rtl 时点号会移到句子的开头
- python - 我收到此错误“列表索引必须是整数或切片,而不是字典”,我该如何解决?
- python - 使用 groupby 提取其他列
- javascript - 如果用户具有特定角色,discord.js 机器人会回复
- apache-kafka - 如何在 mule 中动态设置 kafka 偏移值,以便我们可以从该特定偏移开始处理
- c - 在c中的一行中打印多个字符串值
- python - 如何使用 python 从字典中获取特定的键/值?
- javascript - React JS 中的条件样式
- typescript - 将泛型参数检查为特定的 Prisma 类型
- string - 表达式时如何在Kotlin中使用isNullOrEmpty之类的检查