如何在运行时检查Kotlin类属性是否为可空类型?
运行时检查Kotlin类属性是否为可空类型
问题代码
package qwerty import kotlin.reflect.full.declaredMemberProperties class UserSet( var user1: User, var user2: User? = null, ) class User( var id: Long ) fun main(args: Array<String>) { val type = UserSet::class type.declaredMemberProperties // ??? }
问题描述
UserSet类中,user1是非空User类型,user2是可空User?类型。希望通过KClass对象在运行时检查属性是否被定义为可空类型,调试时在IDEA评估窗口中发现_descriptor下outType的isMarkedNullable属性,但无法在代码中直接访问,请问该如何实现?
解决方案
无需访问内部的_descriptor字段,直接通过Kotlin反射API提供的方法即可实现需求:
实现代码
package qwerty import kotlin.reflect.full.declaredMemberProperties class UserSet( var user1: User, var user2: User? = null, ) class User( var id: Long ) fun main(args: Array<String>) { val userSetClass = UserSet::class userSetClass.declaredMemberProperties.forEach { property -> val isNullable = property.returnType.isMarkedNullable println("属性 ${property.name} 是否可空: $isNullable") } }
关键说明
- 调用
property.returnType获取属性对应的KType对象,该对象封装了类型的元数据信息 KType.isMarkedNullable方法会直接返回该类型是否被显式标记为可空类型,完全匹配需求
运行输出
属性 user1 是否可空: false 属性 user2 是否可空: true
内容的提问来源于stack exchange,提问作者RedMurloc
相关产品推荐
相关产品推荐

