kotlin - Kotlin 类型注解
问题描述
考虑以下注释类
@Target(AnnotationTarget.TYPE)
annotation class ML(val size: Int)
默认情况下,保留策略是RUNTIME
,因此必须可以通过反射访问此注解。
我现在有
val a: @ML(2) List<Int> = listOf(1)
确实可以编译,但是,如果在调试器中检查,则会得到
a::class.annotations.size = 0
我做错了什么,在不将事物包装到类和注释属性的情况下注释类型的正确方法是什么?
解决方案
您使用的表达式:
b::class.annotations
可用于获取返回的类的注解b
。List
没有任何注释,因此您不会得到任何注释。给定您放置注释的位置,您实际上想要获取属性返回类型的注释b
:
::b.returnType.annotations
编辑:我以为b
是财产。您想要做的事情是不可能的,因为注释信息不会存储在 JVM 上的局部变量中。请参阅此问题:我可以使用 Java 反射获取有关局部变量的信息吗?(关于Java,但都是一样的)。如果b
是类属性或顶级属性,那么我展示的内容将适用。
推荐阅读
- grails - Grails 回购失败?
- angular - 带参数的角度自定义验证
- python - Django:如何使用 Django 中的缩写进行过滤?
- c# - 脚本标签不起作用 ASP.NET 核心、webpack、打字稿和淘汰赛
- javascript - javascript 错误“电子邮件”未定义。[no-undef]
- rust - 在没有特征(move_ref_pattern)或 mem::replace 的情况下处理具有组合移动和参考的模式的策略是什么?
- python - SimpleImputer 使用两列计算平均值
- javascript - 如何迭代 Promise 值并填写表格?
- html - 如何从图像中删除此蓝色框?
- kubernetes - Calico Dual Stack 设置问题:服务无法访问其他节点的 pod