Kotlin检查数据类属性是否全部为空

时间:2020-06-24 06:54:58

标签: kotlin reflection

假设我有一个具有可空属性的数据类:

data class User(
   val fName: String?,
   val lName: String?)

在一个函数中,即使该实例不为null,我仍会收到此类的实例,我想检查内部至少一个属性是否已初始化且不为null。我知道我可以一一检查属性,但是我想拥有更通用的属性,我在Google上搜索了一下,似乎Kotlin对此没有扩展功能,因此我实现了一个,并希望与您共享并检查是否有人知道更好方式。

1 个答案:

答案 0 :(得分:2)

因此,可以使用Kotlin反射完成此操作,这是执行此操作的扩展功能:

fun Any.isAllNullInside(): Boolean {
     if(this::class.declaredMemberProperties.any { !it.returnType.isMarkedNullable }) return false
     return this::class.declaredMemberProperties.none { it.getter.call(this) != null }
}

@gidds感谢您的出色表现。我知道它的性能会变差,但是任何基于反射的解决方案都会比手工完成的效果更差。但是,如果可以放宽一些小的性能却有通用的解决方案,那我认为反射是一种非常强大的机制。

关于不可为空的属性和lateinit var,我添加了一行代码来修复这两个问题。谢谢!