首页 > 解决方案 > Kotlin 类型注解

问题描述

考虑以下注释类

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

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

我现在有

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

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

a::class.annotations.size = 0

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

标签: kotlinannotations

解决方案


您使用的表达式:

b::class.annotations

可用于获取返回的类的注解bList没有任何注释,因此您不会得到任何注释。给定您放置注释的位置,您实际上想要获取属性返回类型的注释b

::b.returnType.annotations

编辑:我以为b是财产。您想要做的事情是不可能的,因为注释信息不会存储在 JVM 上的局部变量中。请参阅此问题:我可以使用 Java 反射获取有关局部变量的信息吗?(关于Java,但都是一样的)。如果b是类属性或顶级属性,那么我展示的内容将适用。


推荐阅读