All*_*újo 4 reflection types kotlin
假设我有任何课程,比如这个课程:
class SomeClass(val aThing: String, val otherThing: Double)
Run Code Online (Sandbox Code Playgroud)
然后我用反射来分析这个类的字段:
for(field in SomeClass.declaredMemberProperties){
}
Run Code Online (Sandbox Code Playgroud)
如何查看每个字段的类型?
由于Kotlin没有字段,只有具有支持字段的属性,因此应检查属性的返回类型.
试试这个:
class SomeClass(val aThing: String, val otherThing: Double)
for(property in SomeClass::class.declaredMemberProperties) {
println("${property.name} ${property.returnType}")
}
Run Code Online (Sandbox Code Playgroud)
更新:
如果该类不使用自定义getter和/或没有支持字段的setter,则可以获得支持字段的类型,如下所示:
property.javaField?.type
Run Code Online (Sandbox Code Playgroud)
作为一个完整的例子,这里是你的类,带有一个额外的val属性,名为foo,带有自定义getter(因此不会创建任何支持字段).您将看到该属性的getJavaField()将返回null.
class SomeClass(val aThing: String, val otherThing: Double) {
val foo : String
get() = "foo"
}
for(property in SomeClass::class.declaredMemberProperties) {
println("${property.name} ${property.returnType} ${property.javaField?.type}")
}
Run Code Online (Sandbox Code Playgroud)
UPDATE2:
使用String::class.createType()
将为每个KClass返回KType,因此您可以使用eg property.returnType == String::class.createType()
来查明它是否是(kotlin)字符串.