通过迁移到androidx意外覆盖

时间:2018-10-29 07:18:22

标签: generics kotlin

kotlin:1.2.71 andorid工作室: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>>()

更新

ResourceLiveData位于第三方库中,而库依赖项android.arch.lifecycle位于。

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

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

1 个答案:

答案 0 :(得分:2)

您的代码有很多问题。

    如果要扩展
  • 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>>()