Случайное переопределение при миграции на androidx - PullRequest
0 голосов
/ 29 октября 2018

Котлин: 1.2.71 андорид студия: 3.2.1 Gradle плагин: 3.2.0 Gradle: 4,6


Я получаю ошибку "случайного переопределения" (пример кода ниже), если вы обнаружите какое-либо неправильное использование, скажите, пожалуйста, будьте благодарны.

abstract class ResourceLiveData<T: Resource<*>> : LiveData<T>(){

    override fun observe(owner: LifecycleOwner, observer: Observer<T>) {
        do something here ...
        super.observe(owner, observer)
    }
}

демонстрационный код:

// Inherited platform declarations clash: The following declarations have the same JVM signature (observe(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Observer;)V):
//   fun observe(owner: LifecycleOwner, observer: Observer<Resource<String>>): Unit defined in  com.demo.live.StringResourceLiveData 
//   fun observe(p0: LifecycleOwner, p1: Observer<in Resource<String>!>): Unit defined in com.demo.live.StringResourceLiveData 

class StringResourceLiveData : ResourceLiveData<Resource<String>>()

UPDATE

ResourceLiveData находится в стороннем lib, а зависимость lib android.arch.lifecycle.

Мое приложение мигрирует на androidx, поэтому я добавляю android.useAndroidX=true и android.enableJetifier=true в gradle.properties.

После синхронизации ResourceLiveData.class import изменился на androidx, но проблема здесь в том, что метод переопределения ResourceLiveData не содержит контравариант in, но androidx.lifecycle.LiveData нужен

1 Ответ

0 голосов
/ 29 октября 2018

У вашего кода куча проблем.

  • ResourceLiveData должно быть open, если вы хотите расширить его.
  • Переопределение определено неправильно. Я использовал IDE для генерации правильной версии
  • Выход из класса требует вызова конструктора суперкласса ()

Вот исправленный код

open class ResourceLiveData<T: Resource<*>> : LiveData<T>(){
    override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
        do something here ...
        super.observe(owner, observer)
    }
}

class StringResourceLiveData : ResourceLiveData<Resource<String>>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...