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 属性 或顶级 属性,那么我展示的内容就会适用。
考虑以下注释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 属性 或顶级 属性,那么我展示的内容就会适用。