7
我正在开发一个代码生成器,它在运行时从类中获取数据。该发生器只能与Kotlin一起使用。目前,我面临这个问题,因为我不知道如何检查该字段是否可以空。Kotlin。如何通过反射来检查字段是否可以空?
所以主要问题是如何通过反射来实现此检查?
我正在开发一个代码生成器,它在运行时从类中获取数据。该发生器只能与Kotlin一起使用。目前,我面临这个问题,因为我不知道如何检查该字段是否可以空。Kotlin。如何通过反射来检查字段是否可以空?
所以主要问题是如何通过反射来实现此检查?
您可以用isMarkedNullable
检查空性。以下代码:
class MyClass(val nullable: Long?, val notNullable: MyClass)
MyClass::class.declaredMemberProperties.forEach {
println("Property $it isMarkedNullable=${it.returnType.isMarkedNullable}")
}
将打印:
Property val MyClass.notNullable: stack.MyClass isMarkedNullable=false
Property val MyClass.nullable: kotlin.Long? isMarkedNullable=true
摘自documentation(重点煤矿):
对于科特林类型,这意味着空值允许是 表示通过这种类型。在实践中,这意味着类型是 最后用问号声明。对于非Kotlin类型,其 表示使用此类型声明的类型或符号 使用运行时保留的可空性注释进行了注释,如 javax.annotation.Nullable。
请注意,即使
isMarkedNullable
是假的,该类型的数值可以 仍然是null
。fun <T> foo(t: T) { // isMarkedNullable == false for t's type, but t can be null here }
你可以提供一个链接到文件:如果它是一个可空上限类型的类型参数 的可能出现这种情况? –
@KirillRakhman它在第一行。 – miensol
对不起,错过了。 –