Обновите свойство объекта, если не ноль, или создайте новое свойство, если ноль - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь найти самый хороший и чистый способ обновить свойство обнуляемого объекта, которое также является объектом.Код Psuedo:

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 позже.

I 'Я ищу что-то, где я могу либо извлечь существующее свойство, либо создать новое свойство, а затем сразу установить значение для этого свойства.

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Присвойте значение себе или новому экземпляру, если оно пустое:

myClass.myNullableProperty = myClass.myNullableProperty?: MyPropertyClass()

Если вы хотите избежать дальнейших проверок на нулевое значение:

myClass.myNullableProperty = (myClass.myNullableProperty?: MyPropertyClass()).apply{ 
    name = "Name" 
}

Если доступ к свойствуоднопоточный, вы можете избежать всех ненужных назначений следующим образом:

if (myClass.myNullableProperty == null)
    myClass.myNullableProperty = MyPropertyClass()
myClass.myNullableProperty!!.name = "Name"
0 голосов
/ 26 сентября 2019

Если вы хотите сделать его более котлин-у:

myClass.myNullableProperty?.let {
   it.name = "Name"
} ?: run {
   myClass.myNullableProperty = MyPropertyClass().apply {
      name = "Name"
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...