繁体   English   中英

科特林。如何通过反射检查字段是否可以为空?

[英]Kotlin. How to check if the field is nullable via reflection?

我正在开发一个代码生成器,它在运行时从类中获取数据。 该发生器仅适用于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

摘自文档 (强调我的):

对于Kotlin类型,这意味着允许空值由此类型表示。 实际上,这意味着该类型在结尾处带有问号。 对于非Kotlin类型,它表示使用此类型声明的类型或符号使用运行时保留的可为空性注释(例如javax.annotation.Nullable)进行注释。

请注意,即使isMarkedNullable为false,该类型的值仍可以为null 如果它是具有可为上限的类型参数的类型,则可能发生这种情况:

 fun <T> foo(t: T) { // isMarkedNullable == false for t's type, but t can be null here } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM