web-dev-qa-db-fra.com

Correction correcte d'exposer Mutablelivedata comme Livetaa?

Considérez les moyens suivants d'exposer MutableLiveData:

méthode 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;
   }
}

Method 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;
   }
}

Y a-t-il une raison d'utiliser la méthode B sur la méthode A?

20
user11566289

À partir de KOTLIN 1.4-M2, vous pouvez simplement faire simplement:

private val myMutableLiveData = MutableLiveData<String>()
val myLiveData : LiveData<String> by this::myMutableLiveData

Le this:: Est malheureusement nécessaire, sinon ne compile pas.

J'ai trouvé cela dans réponse d'Igor Wojda qui discute d'autres approches. Malheureusement, sa réponse dans cette question a été supprimée.

0
Mister Smith