首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用KotlinPoet为PropertySpec获取正确的TypeName

如何使用KotlinPoet为PropertySpec获取正确的TypeName
EN

Stack Overflow用户
提问于 2021-04-14 00:15:34
回答 1查看 479关注 0票数 5

使用KotlinPoet,为了生成用于向类和构造函数添加属性的PropertySpec,您需要一个TypeName对象。

不推荐使用TypeMirror.asTypeName() KotlinPoet函数,因为它并不总是对Kotlin类型正确工作。

但我找不到一个如何使用kotlinpoet metadata API为Kotlin类(例如kotlin.String)获取正确TypeName的示例,就像弃用消息所说的那样。

kotlinpoet metadata API的文档似乎也完全崩溃了(转到https://square.github.io/kotlinpoet/interop-kotlinx-metadata/#interop-with-kotlinx-metadata并单击API部分下的任何内容)

有没有人可以举例说明如何用kotlinpoter元数据代码替换TypeMirror.asTypeName()来获取TypeName,这样我就可以创建PropertySpec了?

EN

回答 1

Stack Overflow用户

发布于 2021-06-05 17:29:49

不太确定这是否与弃用消息的意图一致,但这就是我让它工作的原因。

首先,我必须添加kotlinpoet metadata-specs。

代码语言:javascript
复制
implementation("com.squareup:kotlinpoet:1.7.1")
implementation("com.squareup:kotlinpoet-metadata:1.7.1")
implementation("com.squareup:kotlinpoet-metadata-specs:1.7.1")

然后使用com.squareup.kotlinpoet.metadata.specs.internal.ClassInspectorUtil中的util方法创建className。

代码语言:javascript
复制
val packageName = getPackage(element).qualifiedName.toString()
val typeMetadata = element.getAnnotation(Metadata::class.java)
val kmClass = typeMetadata.toImmutableKmClass()
val className = ClassInspectorUtil.createClassName(kmClass.name)

然后使用

代码语言:javascript
复制
val funSpec = FunSpec.builder("allNullableSet")
                     .receiver(className)
                     .returns(Boolean::class.java)
                     .addStatement(statement)
                     .build()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67078665

复制
相关文章

相似问题

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