Правильный способ выставить MutableLiveData как LiveData? - PullRequest
2 голосов
/ 08 июня 2019

Рассмотрим следующие способы выставления MutableLiveData:

Метод A

class ThisViewModel : ViewModel() {

    private val _someData = MutableLiveData(true)
    val someData: LiveData<Boolean>
        get() = _someData
}

// Decompiled Kotlin bytecode

public final class ThisViewModelDecompiled extends ViewModel {

   private final MutableLiveData _someData = new MutableLiveData(true);

   @NotNull
   public final LiveData getSomeData() {
      return (LiveData)this._someData;
   }
}

Метод B

class ThatViewModel : ViewModel() {

    private val _someData = MutableLiveData(true)
    val someData: LiveData<Boolean> = _someData
}

// Decompiled Kotlin bytecode

public final class ThatViewModelDecompiled extends ViewModel {

   private final MutableLiveData _someData = new MutableLiveData(true);

   @NotNull
   private final LiveData someData;

   @NotNull
   public final LiveData getSomeData() {
      return this.someData;
   }

   public ThatViewModel() {
      this.someData = (LiveData)this._someData;
   }
}

Есть ли причина использовать метод B вместо метода A?

1 Ответ

5 голосов
/ 08 июня 2019

С точки зрения Java , Метод A имеет на одно поле меньше в классе, поэтому является «более» эффективным.С точки зрения Kotlin , Метод B немного более ясно указывает на то, что неизменяемое свойство является прямой ссылкой на изменяемое свойство.Также Kotlin достаточно умен для локального доступа к полю, а не к методу получения.

Есть ли причина использовать метод B над методом A?

В общем, это просто вопрос вкуса.Если посмотреть на это с точки зрения микрооптимизации, то это зависит от того, будете ли вы использовать эту ссылку в самом классе или нет.

...