假设我们必须在对象“ObjectD”上设置属性。为了获得这个对象,我们必须经过可为空对象的路径:

objectA.objectB?.objectC?.objectD?.property = 1234

问题是,必须检查每个对象,如果为null,则应创建它。

没有if语句,有没有办法做到这一点?
if (objectA.objectB == null) {
    objectA.objectB = ObjectB().apply {
        objectC = ObjectC().apply {
            objectD = ObjectD().apply {property = 1444}
        }
    }
} else {
    if (objectA.objectB.objectC == null) {
        objectA.objectB.objectC = ObjectC().apply {
            objectD = ObjectD().apply {property = 144}
        }
    }
}

最佳答案

我个人不避免使用if或可能避免使用三元运算符(? :)
但是,我通常会确保在使用之前,我将要使用的所有对象都不为空。

在您的情况下,我将避免嵌套if,方法是:

val wasBNull = false
val wasCNull = false
if (objectA.objectB == null) {
   wasBNull = true
   objectA.objectB = ObjectB()
}
if (objectA.objectB.objectC == null) {
   wasCNull = true
   objectA.objectB.objectC = ObjectC()
}

// ...

关于kotlin - 许多可为空的对象,如何在路径末尾设置属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59857674/

10-10 19:40