2016-09-20 123 views
4

如何获得Kotlin数据类的列表declaredFields?像Java的getDeclaredFields()Kotlin反射 - 得到一个类的所有字段名称

如果这是可能的,它也可以筛选为publicprivate字段? (像Java的Modifier.isPrivate(field.getModifiers())

+0

您对字段(即原始java类)或属性(即javabeans或Kotlin类)感兴趣吗?你只处理Kotlin类还是Java类? –

+0

只Kotlin类但@hotkey的解决方案适用于我的特定问题 – Ivaro18

+0

“_没有关于此call_的文档” - 该文档的链接如下。 –

回答

8

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

MyClass::class.declaredMemberProperties 

获取领域,也可以通过Java反射:

MyClass::class.java.declaredFields 

但字段,而在科特林的实现细节,因为一些属性可能没有backing field


至于知名度,为属性,你可以检查吸气可见性修饰符:

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

注:这是null在一个简单的private val@JvmField的使用情况。那么你可以检查p.javaField

然后,如果modifiers不是null,只需与Modifier.isPrivate(...)核对。

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

+0

,是否有可能创建一个MyClass对象,并设置这些'declaredFields'(使用Java反射)与'Field.name'? – Ivaro18

相关问题