从Java类

时间:2019-04-12 12:04:57

标签: kotlin reflection

我有一个带有注释的接口

@Target(AnnotationTarget.PROPERTY)
annotation class Foo()

interface Bah {
    @Foo val prop: String
}

我正在实现杰克逊上下文解串器,我需要从接口中的方法中选取此批注。

   override fun createContextual(ctxt: DeserializationContext, property: BeanProperty?): JsonDeserializer<*> {
        val clzz = ctxt.contextualType.rawClass as Class<T>
        for (method in clzz.methods) {
            val anns = method.getAnnotationsByType(Foo::class.java)

ctxt.contextualType是JavaType。我从中获取了clzz,这产生了一个Bah类型的类(即接口)。我可以迭代这些方法,其中包括“ prop”;但是,道具没有注释。

如果我将注释站点修改为如下所示,它将起作用:

interface Bah {
    val prop: String
        @Foo() get

但是,这很丑。如何修改内容,以便可以直接从interface属性检索?

谢谢

1 个答案:

答案 0 :(得分:3)

不能。与the documentation says一样,从Java中看不到针对属性的注释(因为Java没有属性的概念)。