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

标签 kotlin reflection

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

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

最佳答案

因此,这可以使用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 vars有关,我添加了一行代码来修复这两个问题。多谢!

关于kotlin - Kotlin检查数据类属性是否全部为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62549364/

相关文章:

android - Android资源编译失败-AAPT错误-资源重复值

android - android中的MediaSessionCompat和MediaSession有什么区别?为什么有 androidx.media2 androidx.media 都存在?

android - Moshi 1.9.1 无法序列化 Kotlin 类型

reflection - 在 Golang 中将值类型转换为 Map?

c# - AddEventHandler 使用反射

java - 获取一个类中的所有方法---容易出错

android - 为什么 Kotlin 允许在不同的文件夹中有两个具有相同名称和包的类(即 : main and androidTest)?

kotlin - 何时在 Kotlin 中启动新范围

ubuntu - 如何使用 Kotlin 的反射?

java - 如何获取给定.java 文件的类变量计数?