gpt4 book ai didi

reflection - 检查成员(member)/属性(property)类型

转载 作者:太空宇宙 更新时间:2023-11-04 10:03:49 25 4
gpt4 key购买 nike

假设我有任何类(class),比如这个:

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

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

for(field in SomeClass.declaredMemberProperties){

}

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

最佳答案

由于 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

作为一个完整的示例,这里是您的类,其中包含一个名为 foo 的附加 val 属性,带有自定义 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}")
}

更新2:

使用String::class.createType()将返回每个KClass的KType,因此您可以使用例如property.returnType == String::class.createType() 以查明它是否是 (kotlin) 字符串。

关于reflection - 检查成员(member)/属性(property)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53170648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com