假设我有以下情况:

abstract class Foo {

    abstract fun bar();

    fun baz() {
        println(this::bar.annotations)
    }

}

class Qux : Foo {

    @Annotation
    override fun bar() {
        ...
    }

}

当我try 实现这一点时,它确实获得了子类中定义的注释,它获得了父类中定义的注释.如果我没记错的话,Java曾经做过前者,这就是我在这里try 做的.我的目标输出是在运行Qux#baz时打印@Annotation.这在Kotlin 有可能吗?

使用this::bar.javaClass.annotations可以修复它,这样我就可以看到注释,但是我不能使用is获得注释的类型,至少如果我可以的话,我不完全确定如何获得.

推荐答案

将原来的println行替换为以下行解决了此问题:

...
    val method = this::class.java.getDeclaredMethod("bar")
    println(method.annotations)
...

Kotlin相关问答推荐

了解Kotlin函数

使用数据存储首选项Kotlin Jetpack Compose

Kotlin编译器如何决定是否可以在任何给定点调用Suspend方法?

我需要后台工作才能使用卡夫卡的消息吗?

在Kotlin中的嵌套when语句中,else块是强制性的吗?

为什么 trySend 会发出假数据?

通用接口继承

为什么 Kotlin 中的 Double 和 Long 类型不推荐直接转换为 Char?

如何连接两个 kotlin 流?

使用 Kotlin 协程时 Room dao 类出错

@InlineOnly 注释是什么意思?

Kotlin:泛型、反射以及类型 T 和 T:Any 之间的区别

Anko 中的水平线性布局

在协程中等待侦听器内的数据

如何修复 ViewPager2 中的Design assumption violated错误?

在java代码中使用kotlin库

如何在使用Koin DI的活动之间共享同一个ViewModel实例?

Kotlin 警告:Conditional branch result of type ... is implicity cast of Any?

如何在kotlin用mockito模仿lambda

带有注释为@RegisterExtension的字段的 JUnit 5 测试在 Kotlin 中不起作用