java从KType中检索注释
我有一个简单的TYPE_USE
注释:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface Cool {
}
以及以下Kotlin类示例:
class Item(
id: Long? = null,
var names: List<@Cool String> = emptyList())
有没有办法使用Java反射提取注释
Item.class.getMethod("getName").getAnnotatedReturnType()
丢失注释,与获取字段相同
我能从科特林那里得到注释吗
Item::class.memberProperties.elementAt(0).returnType
返回一个带有注释的KType
,但我看不到提取它的方法。也不是从KType
获取AnnotatedType
,即使我有JDK8扩展
我看到的只是KType#javaType
,但它返回Type
,而不是AnnotatedType
。。。所以它又松开了注释
# 1 楼答案
编辑:this is a bug and has been reported。目前还没有一个目标版本,但其优先级已设置为MARGY这在Kotlin 1.3中已修复TL;医生:不罢工>用
@Cool
注释的项是第一个类型参数,因此需要检索它:不幸的是,似乎没有办法检索
KType
上的注释(正如您所提到的)奇怪的是,这是一个非常内在的过程。查看^{} 的源代码可以看出} with modifiers ^{}
toString
是通过ReflectionObjectRenderer.renderType(type)
(其中类型是KotlinType
)实现的,它被委托给DescriptorRenderer.FQ_NAMES_IN_TYPES
,我们可以看到它是a ^{呈现程序检查该类型是否为
kotlin.reflect.jvm.internal.impl.descriptors.annotations.Annotated
的子类,然后访问其annotations
属性我试过这个:
不幸的是,我为
org.jetbrains.kotlin.types.KotlinType
得到了一个ClassNotFoundException
,所以那个选项不见了同样奇怪的是,
KType
不是KAnnotatedElement
的子类型(这就是为什么它没有annotations
属性)我想这可能是一个疏忽,因为
KTypeImpl
包装了一个KotlinType
,它确实包含注释