我正在尝试找到最好的,最干净的方法来更新也是一个对象的可空对象属性。伪代码:
class MyClass {
val myNullableProperty: MyPropertyClass?
}
这是我到目前为止的丑陋解决方案:
val myProperty = myClass.myNullableProperty ?: MyPropertyClass() // MyPropertyClass has default constructor values so this is fine instantiating like this in my example
myProperty.name = "Name"
myClass.myNullableProperty = myProperty
这只是感觉不是最好的方法。我觉得有一种使用let / apply / with / run等的解决方案。-这样定义局部变量myProperty
,然后稍后将其设置为myNullableProperty
感觉很浪费。
我正在寻找可以检索现有属性或创建新属性,然后立即在该属性上设置值的东西。
答案 0 :(得分:1)
将值分配给自己,如果为空,则分配一个新实例:
myClass.myNullableProperty = myClass.myNullableProperty?: MyPropertyClass()
如果要避免进一步的空检查:
myClass.myNullableProperty = (myClass.myNullableProperty?: MyPropertyClass()).apply{
name = "Name"
}
如果对属性的访问是单线程的,则可以通过以下方式避免所有不必要的分配:
if (myClass.myNullableProperty == null)
myClass.myNullableProperty = MyPropertyClass()
myClass.myNullableProperty!!.name = "Name"
答案 1 :(得分:0)
如果您想让它更实用,请
myClass.myNullableProperty?.let {
it.name = "Name"
} ?: run {
myClass.myNullableProperty = MyPropertyClass().apply {
name = "Name"
}
}