5 android kotlin android-livedata
考虑以下公开方法MutableLiveData
:
方法一
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;
}
}
Run Code Online (Sandbox Code Playgroud)
方法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;
}
}
Run Code Online (Sandbox Code Playgroud)
是否有理由使用方法B而非方法A?
从 Kotlin 1.4-M2 开始,您可以简单地执行以下操作:
private val myMutableLiveData = MutableLiveData<String>()
val myLiveData : LiveData<String> by this::myMutableLiveData
Run Code Online (Sandbox Code Playgroud)
不幸的是需要它this::
,否则无法编译。
我在Igor Wojda 的回答中找到了这一点,该回答讨论了其他方法。不幸的是他在这个问题上的回答被删除了。
从Java的角度来看,方法A在类中的字段较少,因此“更有效”。从Kotlin的角度来看,方法B更加清楚地表明,不可更改属性是对可变属性的直接引用。而且Kotlin足够聪明,可以本地访问该字段,而不是使用getter方法。
是否有理由使用方法B而非方法A?
一般而言,仅是口味问题。从微观优化的角度来看,它取决于您是否还要在类本身内使用此引用。
归档时间: |
|
查看次数: |
404 次 |
最近记录: |