You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:32:05