检查成员/属性的类型

时间:2018-01-22 13:51:40

标签: reflection types kotlin

假设我有任何课程,例如:

Type: interface {}
Kind: interface
IsInterface: true

然后我使用反射来分析这个类的字段:

class SomeClass(val aThing: String, val otherThing: Double)

如何查看每个字段的类型?

1 个答案:

答案 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)字符串。