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)
}
我在 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)
}