Kotlin反射 - 获取类的所有字段名称

时间:2016-09-20 08:58:42

标签: java reflection kotlin

如何获得Kotlin数据类的列表declaredFields?就像Java的getDeclaredFields()

一样

如果可以,还可以过滤publicprivate字段吗? (像Java' s Modifier.isPrivate(field.getModifiers())

3 个答案:

答案 0 :(得分:10)

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

MyClass::class.declaredMemberProperties

通过Java反射也可以获得字段:

MyClass::class.java.declaredFields

但是字段在Kotlin中是一个实现细节,因为某些属性可能没有backing field

关于可见性,对于属性,您可以检查getter可见性修饰符:

val p = MyClass::class.declaredMemberProperties.first()
val modifiers = p.javaGetter?.modifiers

注意:如果使用简单null@JvmField,则private valp.javaField。然后,您可以检查modifiers

然后,如果null不是Modifier.isPrivate(...),请使用UIWebView进行检查。

Kotlin中的属性可以有separate visibility modifiers for getter and setter,但是setter访问权限不能比getter更宽松,这实际上是属性可见性。

答案 1 :(得分:3)

确实有可用于Kotlin反射的文档:an overall summary of reflection和包含API docs函数的KClass.members。您也可以跳转到该方法的声明,您将看到它也在源代码中记录。

答案 2 :(得分:2)

使用MyClass::class.java.declaredFields或它的实例:myObject::class.java.declaredFields