Я разрабатываю свое собственное расширение 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-код, чтобы сделать его безопасным?
- Действительно ли подстановочные знаки kotlin действительно безопасны, потому что у kotlin нет типа raw ?Или они просто не показывают предупреждения?
- И, наконец, стоит ли разрабатывать библиотеки Android в 2019 году на Java?