Kotlin 类型注解

Kotlin type annotation

考虑以下注释class

@Target(AnnotationTarget.TYPE)
annotation class ML(val size: Int)

默认情况下,保留策略是 RUNTIME,因此必须可以通过反射访问此注释。

现在我有

val a: @ML(2) List<Int> = listOf(1)

确实可以编译,但是,如果在调试器中检查,就会得到

a::class.annotations.size = 0

我做错了什么?在不将内容包装到 classes 和注释属性的情况下注释类型的正确方法是什么?

您使用的表达方式:

b::class.annotations

可用于获取 class return 由 b 编辑的注释。 List 没有任何注释,所以你没有注释。给定注释的位置,您实际上想要获取 属性 return 类型的注释 b:

::b.returnType.annotations

编辑: 我认为 b 是 属性。你想做的是不可能的,因为 JVM 上没有为局部变量存储注释信息。看到这个问题:Can I get information about the local variables using Java reflection?(大约Java但都是一样的)。如果 b 是 class 属性 或顶级 属性,那么我展示的内容就会适用。