如何获得Kotlin数据类的列表declaredFields
?就像Java的getDeclaredFields()
如果可以,还可以过滤public
和private
字段吗? (像Java' s Modifier.isPrivate(field.getModifiers())
)
答案 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 val
为p.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
。