假设我有一个具有可空属性的数据类:
data class User(
val fName: String?,
val lName: String?)
在一个函数中,即使该实例不为null,我仍会收到此类的实例,我想检查内部至少一个属性是否已初始化且不为null。我知道我可以一一检查属性,但是我想拥有更通用的属性,我在Google上搜索了一下,似乎Kotlin对此没有扩展功能,因此我实现了一个,并希望与您共享并检查是否有人知道更好方式。
答案 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,我添加了一行代码来修复这两个问题。谢谢!