我有以下声明:
val selectedPhotos: MutableLiveData<List<Photo>> = MutableLiveData()
我有以下方法应该返回 selectedPhotos,它是 MutableLiveData 类型。
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
作为返回类型,这是我声明的正确类型。
提前非常感谢,
最佳答案
当您在 kotlin 中声明某些内容时,kotlin 会为您创建它的 setter 和 getter。因此,考虑到您声明 var abc
,kotlin 将声明 setAbc
和 getAbc
,这对于数据类来说非常少。
在您的例子中,由于您的属性名称是 selectedPhotos,kotlin 已经创建了一个名为 getSelectedPhotos 且返回类型为 MutableLiveData> 的 getter。因此,您会遇到冲突,因为两个方法具有相同的名称和返回类型。
就您而言,您不需要显式声明此 getSelectedPhotos
,因为 kotlin 已经为您声明了这一点。您可以在 kotlin 和 JAVA 类中访问 kotlin 声明的 getter 和 setter。
编辑: 如果您想查看 kotlin 文件生成的 JAVA 类,请打开 kotlin 文件,然后转到 工具 -> Kotlin -> 显示 Kotlin字节码,然后单击打开屏幕上的反编译按钮。
关于java - 返回扩展类的类型给平台声明冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60354449/