我有以下声明:
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
作为返回类型(我声明的正确类型)感到困惑。
在此先感谢
答案 0 :(得分:2)
当您在kotlin中声明某些内容时,kotlin会为您创建它的setter和getter。因此,考虑到您声明WHITE
,kotlin将声明var abc
和setAbc
,这对于数据类非常有用。
在您的情况下,由于您的财产名称为 selectedPhotos ,kotlin会创建一个名为 getSelectedPhotos 的吸气剂,其返回类型为 MutableLiveData> 。因此,您会遇到冲突,因为两个方法的名称和返回类型相同。
在您的情况下,您不需要显式声明此getAbc
,因为kotlin已经为您声明了这一点。您可以在kotlin和JAVA类中访问kotlin声明的getter和setter。
编辑: 如果您想查看为kotlin文件生成的JAVA类,请打开kotlin文件,然后转到工具-> Kotlin -> 显示Kotlin字节码,然后点击打开的屏幕上的反编译按钮。