返回扩展类的类型给平台声明冲突

时间:2020-02-22 16:50:38

标签: java kotlin

我有以下声明:

val selectedPhotos: MutableLiveData<List<Photo>> = MutableLiveData()

我有以下方法应返回为MutableLiveData类型的selectedPhotos。

fun getSelectedPhotos(): MutableLiveData<List<Photo>> {
    return selectedPhotos
}

但是,以下内容给我一个错误:

Platform declaration clash: The following declarations have the same JVM signature (getSelectedPhotos()Landroidx/lifecycle/MutableLiveData;):
    fun <get-selectedPhotos>(): MutableLiveData<List<Photo>> defined in com.raywenderlich.android.combinestagram.SharedViewModel
    fun getSelectedPhotos(): MutableLiveData<List<Photo>> defined in com.raywenderlich.android.combinestagram.SharedViewModel

但是,如果我改变乐趣以返回以下内容,一切正常:

fun getSelectedPhotos(): LiveData<List<Photo>> {
    return selectedPhotos
}

但是,查看以下MutableLiveData扩展了LiveData

public class MutableLiveData<T> extends LiveData<T> {
...
}

对于为什么不能使用MutableLiveData作为返回类型(我声明的正确类型)感到困惑。

在此先感谢

1 个答案:

答案 0 :(得分:2)

当您在kotlin中声明某些内容时,kotlin会为您创建它的setter和getter。因此,考虑到您声明WHITE,kotlin将声明var abcsetAbc,这对于数据类非常有用。

在您的情况下,由于您的财产名称为 selectedPhotos ,kotlin会创建一个名为 getSelectedPhotos 的吸气剂,其返回类型为 MutableLiveData> 。因此,您会遇到冲突,因为两个方法的名称和返回类型相同。

在您的情况下,您不需要显式声明此getAbc,因为kotlin已经为您声明了这一点。您可以在kotlin和JAVA类中访问kotlin声明的getter和setter。

编辑: 如果您想查看为kotlin文件生成的JAVA类,请打开kotlin文件,然后转到工具-> Kotlin -> 显示Kotlin字节码,然后点击打开的屏幕上的反编译按钮。

相关问题