【问题标题】:Kotlin type annotationKotlin 类型注解
【发布时间】:2021-02-10 15:00:48
【问题描述】:

考虑下面的注解类

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

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

现在我有

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

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

a::class.annotations.size = 0

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

【问题讨论】:

    标签: kotlin annotations


    【解决方案1】:

    你使用的表达方式:

    b::class.annotations
    

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

    ::b.returnType.annotations
    

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

    【讨论】:

    • 对不起,我不明白你的意思。
    • 有一点可能会改变解决方案:b 是局部变量、类属性还是顶级属性?
    • 它是一个局部变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多