Kotlin 通过当前注解过滤 memberProperties class

Kotlin filter memberProperties by present annotation class

我在 Any 类型上有一个扩展方法 运行。 在该扩展方法(其中 this 指的是目标实例)上,我试图根据注释存在过滤 memberProperties。

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

这是应用注释的问题。如果你有一个目标为 "property" 的注解,你的代码会很好地列出它们:

@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY)
annotation class ValidComponent

I assume 你的注释有一个 "field" 目标,在这种情况下你必须跳过 Java 反射来列出你的属性的注释:

this::class.memberProperties
        .filter { property ->
            val fieldAnnotations = property.javaField?.annotations
            fieldAnnotations != null && fieldAnnotations.map { ann -> ann.annotationClass }.contains(ValidComponent::class)
        }