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?
À 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.