Kotlinreflection – 获取一个类的所有字段名称
我怎样才能得到一个Kotlin数据类的declaredFields
它的declaredFields
? 像Java的getDeclaredFields()
如果这是可能的,是否也可以过滤public
和private
领域? (像Java的Modifier.isPrivate(field.getModifiers())
)
可能你想要的是获得一个类的属性,而不是字段。 这可以如下完成:
MyClass::class.declaredMemberProperties
通过Javareflection获取字段也是可能的:
MyClass::class.java.declaredFields
但是,字段在Kotlin中是一个实现细节,因为某些属性可能没有后台字段 。
至于可见性,对于属性你可以检查getter visibility修饰符:
val p = MyClass::class.declaredMemberProperties.first() val modifiers = p.javaGetter?.modifiers
注意:如果使用简单的private val
或@JvmField
。 然后你可以检查p.javaField
。
然后,如果modifiers
不为null
,只需使用Modifier.isPrivate(...)
检查它。
Kotlin中的属性可以为getter和setter分别设置可见性修饰符 ,但setter访问不能比getter更宽容,这实际上是属性的可见性。
确实有Kotlinreflection的文档:对reflection的总体概述和包含KClass.members函数的API文档 。 您也可以跳转到该方法的声明,您将看到它也被记录在源代码中。