[英]Java unchecked call vs Kotlin in Android LiveData
我正在開發自己的LiveData擴展。
我決定用Java來做。
我的代碼:
public class LiveEvent<T> extends LiveData<T> {
@Override
public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super T> observer) {
// unchecked!
Wrapper wrapper = new Wrapper(observer);
super.observe(owner, observer);
}
public class Wrapper<V> implements Observer<V> {
private final Observer<? super V> mObserver;
Wrapper(final Observer<? super V> observer) {
mObserver = observer;
}
@Override
public void onChanged(V v) {
//todo
}
}
}
問題: Wrapper wrapper = new Wrapper(observer);
是未選中的呼叫。 但是,在Kotlin中,它看起來還不錯:
class LiveEvent<T> : LiveData<T>() {
override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
val wrapper = Wrapper(observer)
super.observe(owner, observer)
}
inner class Wrapper<T> internal constructor(private val mObserver: Observer<in T>) : Observer<T> {
override fun onChanged(t: T) {
//todo
}
}
}
所以,我有幾個問題:
如何改善Java代碼以使其安全?
您一切正常,只是new Wrapper(observer)
在Java中提供了原始類型。 您需要指定通用類型:
Wrapper<T> wrapper = new Wrapper<>(observer);
這將使警告消失,所有類型現在都匹配。
除此之外,您的Kotlin代碼和Java代碼是等效的。 您不必在Kotlin中指定泛型類型,因為它會從observer
推斷出類型(並且您不必顯式鍵入變量)。
在2019年使用Java開發android庫是個好主意嗎?
您的第三個問題是基於觀點的,因此不要期望在Stack Overflow上有任何答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.