java Kotlin反射获取类的所有字段名
如何获取Kotlin数据类的列表,它是declaredFields
?就像Java的getDeclaredFields()
如果这是可能的,是否也可以过滤public
和private
字段?(就像Java的Modifier.isPrivate(field.getModifiers())
)
你可以在下面搜索框中键入要查询的问题!
如何获取Kotlin数据类的列表,它是declaredFields
?就像Java的getDeclaredFields()
如果这是可能的,是否也可以过滤public
和private
字段?(就像Java的Modifier.isPrivate(field.getModifiers())
)
# 1 楼答案
Kotlin反射:an overall summary of reflection和API docs包括KClass.members函数确实有可用的文档。您还可以跳转到该方法的声明,您将看到它也记录在源代码中
# 2 楼答案
最好的方法是检查哪些成员是
KProperty1<*,*>
的子类为什么
KProperty1
?正如文件(https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-property/)所述,KProperty0
表示静态属性(如在包的根中定义的属性)KProperty2
表示扩展属性,KProperty1
表示字段如果只需要声明的属性,可以将其与Java反射混合使用
# 3 楼答案
可能您想要的是获取类的属性,而不是字段。这可以通过以下方式实现:
也可以通过Java反射获取字段:
但是字段在Kotlin中是一个实现细节,因为有些属性可能没有backing field
至于可见性,对于属性,可以查看getter可见性修饰符:
注意:对于简单的} 用法,它是
private val
或^{null
。然后你可以检查p.javaField
然后,如果
modifiers
不是null
,就用Modifier.isPrivate(...)
检查一下Kotlin中的属性可以有separate visibility modifiers for getter and setter,但setter访问权限不能比getter访问权限更大,getter访问权限实际上是属性可见性
# 4 楼答案
使用
MyClass::class.java.declaredFields
或其实例:myObject::class.java.declaredFields