Kotlin反射 – 获取一个类的所有字段名称

我怎样才能得到一个Kotlin数据类的declaredFields它的declaredFields ? 像Java的getDeclaredFields()

如果这是可能的,是否也可以过滤publicprivate领域? (像Java的Modifier.isPrivate(field.getModifiers())

可能你想要的是获得一个类的属性,而不是字段。 这可以如下完成:

 MyClass::class.declaredMemberProperties 

通过Java反射获取字段也是可能的:

 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更宽容,这实际上是属性的可见性。

确实有Kotlin反射的文档:对反射的总体概述和包含KClass.members函数的API文档 。 您也可以跳转到该方法的声明,您将看到它也被记录在源代码中。