Generics 迁移到androidx时意外覆盖

Generics 迁移到androidx时意外覆盖,generics,kotlin,Generics,Kotlin,科特林:1.2.71 安道尔工作室:3.2.1 gradle插件:3.2.0 格拉德尔:4.6 我从下面得到一个意外覆盖错误代码示例,如果您发现任何错误使用,请告诉我,不胜感激 abstract class ResourceLiveData<T: Resource<*>> : LiveData<T>(){ override fun observe(owner: LifecycleOwner, observer: Observer<T>)

科特林:1.2.71 安道尔工作室:3.2.1 gradle插件:3.2.0 格拉德尔:4.6

我从下面得到一个意外覆盖错误代码示例,如果您发现任何错误使用,请告诉我,不胜感激

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

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

// 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>>()
使现代化 ResourceLiveData位于第三方库中,库依赖于android.arch.lifecycle

我的应用程序正在迁移到androidx,因此,我在gradle.properties中添加了android.useAndroidX=true和android.enableJetifier=true


同步后,ResourceLiveData.class导入已更改为androidx,但这里的问题是,ResourceLiveData重写方法中不包含反变量,但androidx.lifecycle.LiveData需要它

您的代码存在一系列问题

如果要扩展ResourceLiveData,则需要将其打开。 覆盖定义不正确。我使用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>>()

你的代码有很多问题

如果要扩展ResourceLiveData,则需要将其打开。 覆盖定义不正确。我使用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>>()

请发布您收到的完整错误。@EvanKnowles这是一个编译错误,完整消息已发布在示例代码注释中。请发布您收到的完整错误。@EvanKnowles这是一个编译错误,完整消息已发布在示例代码注释中我的错误,本例中的ResourceLiveData是抽象类我的错误,本例中的ResourceLiveData是抽象类