Kotlinreflection – 获取一个类的所有字段名称
我怎样才能得到一个Kotlin数据类的declaredFields
它的declaredFields
? 像Java的getDeclaredFields()
如果这是可能的,是否也可以过滤public
和private
领域? (像Java的Modifier.isPrivate(field.getModifiers())
)
可能你想要的是获得一个类的属性,而不是字段。 这可以如下完成:
MyClass::class.declaredMemberProperties
通过Javareflection获取字段也是可能的:
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更宽容,这实际上是属性的可见性。
确实有Kotlinreflection的文档:对reflection的总体概述和包含KClass.members函数的API文档 。 您也可以跳转到该方法的声明,您将看到它也被记录在源代码中。
- 在Kotlin 1.1.0编译中无法解析符号@ReadOnly和@Mutable
- 正则表达式可以识别/ * … * /注释
- 如何使用Firebase 1.0.2忽略对象模型的新字段
- 与AsyncRestTemplate Netty客户端的Spring启动失败
- Kotlin生成通用的Java代码
- Android – 以下类的超types无法解析 – (Room Persistant Library,Android Library Module)
- 将无限期运行的Runnable从java转换为kotlin
- 如何更改IntelliJ上的Kotlin编译器版本?
- Spring 5和Kotlin 1.1协程:类型rx.Scheduler不存在