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

Kotlin自定义属性注解未被识别问题求助

问题原因与解决方法

你调用Student::class.annotations拿不到注解的核心原因是:这个API仅返回直接标注在类本身上的注解,而你的@AltArg是标注在类的成员属性上的,自然不在这个集合里。另外还有一个容易忽略的点:Kotlin注解默认的保留策略是AnnotationRetention.SOURCE(仅在源码阶段保留,编译后丢弃),如果要在运行时通过反射获取注解,必须显式指定保留策略为RUNTIME。

步骤1:修正注解的保留策略

首先修改你的AltArg注解类,添加@Retention(AnnotationRetention.RUNTIME),确保注解能在运行时被反射读取:

@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY)
annotation class AltArg(val name: String)

步骤2:正确获取属性上的注解

通过Kotlin反射API遍历类的成员属性,逐个查找属性上的@AltArg注解:

fun main() {
    // 获取Student类的所有成员属性
    val memberProperties = Student::class.memberProperties
    
    // 遍历属性,提取AltArg注解
    memberProperties.forEach { property ->
        val altArg = property.findAnnotation<AltArg>()
        altArg?.run {
            println("属性 ${property.name} 对应的AltArg名称:$name")
        }
    }
}

运行这段代码,就能正确输出每个标注了@AltArg的属性对应的注解信息了。

补充说明

  • KClass.memberProperties:返回类的所有成员属性(包括主构造函数中声明的val/var)。
  • KProperty.findAnnotation<T>():Kotlin反射提供的扩展函数,专门用于查找属性上的指定注解,找不到时返回null。

内容的提问来源于stack exchange,提问作者ARainyCloud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:15:59