使用KotlinPoet能否为KSP生成的类属性添加@field:注解?
KotlinPoet 实现带 @field:Annotation 的属性生成
完全可以通过 KotlinPoet 实现你要的代码结构,核心是在构建注解时指定字段目标(Field Use Site Target)。
以下是具体实现代码:
import com.squareup.kotlinpoet.* import java.io.File fun main() { // 1. 构建 @field:Annotation 注解 val fieldAnnotation = AnnotationSpec.builder(ClassName("your.package", "Annotation")) .useSiteTarget(UseSiteTarget.FIELD) // 指定注解作用在字段上 .build() // 2. 构建带注解的可变属性 val propertySpec = PropertySpec.builder("myProperty", ClassName("your.package", "MyType")) .mutable() // 对应 var 关键字 .addAnnotation(fieldAnnotation) // 添加字段级注解 .build() // 3. 构建目标类并添加属性 val classSpec = ClassName("your.package", "MyClass") .toBuilder() .addProperty(propertySpec) .build() // 4. 生成 Kotlin 代码到指定目录 File("generated").apply { mkdirs() } FileSpec.builder("your.package", "MyClass") .addType(classSpec) .build() .writeTo(File("generated")) }
运行代码后会生成你需要的结构:
class MyClass { @field:Annotation var myProperty: MyType }
关键说明:
- 通过
AnnotationSpec.Builder.useSiteTarget(UseSiteTarget.FIELD)可以指定注解的作用目标为字段,从而生成带@field:前缀的注解 PropertySpec.mutable()用于生成可变属性(对应 Kotlin 中的var)
内容的提问来源于stack exchange,提问作者kaneda
相关产品推荐
相关产品推荐

