如何使用KotlinPoet生成Kotlin类Companion的静态扩展属性
解决方案
该需求完全可以通过KotlinPoet实现,核心是正确指定扩展属性的接收者类型为MyClass的伴生对象类型,无需额外特殊配置。
实现示例代码
import com.squareup.kotlinpoet.ClassName import com.squareup.kotlinpoet.FileSpec import com.squareup.kotlinpoet.PropertySpec import com.squareup.kotlinpoet.LONG fun main() { // 构造MyClass.Companion的类型,注意替换第一个参数为MyClass实际所在的包名 val myClassCompanion = ClassName("com.your.package", "MyClass", "Companion") // 构建目标扩展属性 val classIDProperty = PropertySpec.builder("classID", LONG) .receiver(myClassCompanion) // 指定接收者为伴生对象 .getter( PropertySpec.getterBuilder() .addStatement("return 0x100") .build() ) .build() // 输出代码,可替换writeTo参数指定输出到对应目录 val fileSpec = FileSpec.builder("com.your.output.package", "GeneratedExt") .addProperty(classIDProperty) .build() fileSpec.writeTo(System.out) }
输出验证
运行上述代码后会直接输出你需要的目标代码:
public val MyClass.Companion.classID: Long get() = 0x100
注意事项
- 如果你的
MyClass的伴生对象设置了自定义名称,只需把ClassName构造参数里的"Companion"替换为自定义的伴生对象名即可 - 注意替换
ClassName第一个参数的包名字段为MyClass实际所在的包名,避免生成错误的全类名引用
内容的提问来源于stack exchange,提问作者Junior.CodingCamp
相关产品推荐
相关产品推荐

