假设我有一个具有可为空属性的数据类:
data class User(
val fName: String?,
val lName: String?)
Run Code Online (Sandbox Code Playgroud)
在一个函数中,即使该实例不为空,我也会收到此类的实例,我想检查内部的至少一个属性是否已初始化且不为空。我知道我可以一一检查属性,但我想要一些更通用的东西,我用谷歌搜索了一下,似乎 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 }
}
Run Code Online (Sandbox Code Playgroud)
@gidds 谢谢你的好收获。我知道它的性能会更差,但是任何基于反射的解决方案都会比手动完成的解决方案性能更差。但是,如果可以损失一些小的性能但有通用的解决方案,我想反射是非常强大的机制。
与不可空属性和 Lateinit 变量相关,我添加了一行代码来修复这两个问题。感谢您的捕获!
| 归档时间: |
|
| 查看次数: |
4537 次 |
| 最近记录: |