我有一个在Any
类型上运行的扩展方法。
在该扩展方法(this
指向目标实例)上,我试图根据注释的存在来过滤memberProperty。
this::class.memberProperties
.filter{ it.annotations.map { ann -> ann.annotationClass }.contains(ValidComponent::class)}
但是it.annotations
的大小始终为0
实例上的变量声明示例:
@ValidComponent var x: SomeType = constructorParam.something
或@ValidComponent lateinit var x: SomeType
答案 0 :(得分:0)
这是注释所应用的问题。如果您的注释的目标是“属性”,则您的代码将列出它们就可以了:
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY)
annotation class ValidComponent
I assume您的注释具有一个“字段”目标,在这种情况下,您将不得不跳过Java反射以在属性上列出注释:
this::class.memberProperties
.filter { property ->
val fieldAnnotations = property.javaField?.annotations
fieldAnnotations != null && fieldAnnotations.map { ann -> ann.annotationClass }.contains(ValidComponent::class)
}