假设我有任何课程,例如:
Type: interface {}
Kind: interface
IsInterface: true
然后我使用反射来分析这个类的字段:
class SomeClass(val aThing: String, val otherThing: Double)
如何查看每个字段的类型?
答案 0 :(得分:5)
由于Kotlin没有字段,只有具有支持字段的属性,因此应检查属性的返回类型。
试试这个:
class SomeClass(val aThing: String, val otherThing: Double)
for(property in SomeClass::class.declaredMemberProperties) {
println("${property.name} ${property.returnType}")
}
<强>更新强>
如果该类不使用自定义getter和/或没有后备字段的setter,则可以获得支持字段的类型,如下所示:
property.javaField?.type
作为一个完整的例子,这里有一个带有额外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}")
}
<强> UPDATE2:强>
使用String::class.createType()
将为每个KClass返回KType,因此您可以使用例如property.returnType == String::class.createType()
找出它是否是(kotlin)字符串。