我想迭代我的一个类中的所有字段,过滤注释的字段,然后检查字段是否有一个特定的类型。
我发现的只有field.returnType.isSubtype(other: KType)
,但我不知道如何获得我其他课程的KType
。
到目前为止,这是我的代码:
target.declaredMemberProperties.forEach {
if (it.findAnnotation<FromOwner>() != null) {
if ( /* it.returnType is Component <- Here I need some working check */ ) {
// do stuff
} else {
// do ther stuff
}
}
}
答案 0 :(得分:8)
这里至少有两种解决方案:
使用.jvmErasure
获取KClass<*>
it.returnType
,然后检查KClass
es的子类型关系:
it.returnType.jvmErasure.isSubclassOf(Component::class)
从Kotlin 1.1开始,您可以使用.createType()
从KType
令牌构造KClass
(检查其可选参数:您可以使用它们来提供可为空性信息,输入参数和注释),然后按照建议检查子类型:
it.returnType.isSubtypeOf(Component::class.createType())
在每次迭代时创建类型可能会引入性能问题,请确保在需要时对其进行缓存。