Вернуть тип расширенного класса, дать объявление платформы clash - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть следующее объявление:

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 в качестве возвращаемого типа, который является правильным типом, который я объявил.

Заранее большое спасибо,

1 Ответ

2 голосов
/ 22 февраля 2020

Когда вы объявляете что-то в kotlin, kotlin создает его для вас. Таким образом, учитывая, что вы объявляете var abc, kotlin объявит setAbc и getAbc, что очень полезно для классов данных.

В вашем случае, поскольку ваше свойство имеет имя selectedPhotos, kotlin уже создал бы метод получения с именем getSelectedPhotos с типом возврата MutableLiveData> . Из-за этого вы получаете cla sh, так как два метода имеют одинаковое имя и тип возвращаемого значения.

В вашем случае вам не нужно явно указывать этот getSelectedPhotos, поскольку kotlin имеет уже заявил, что для вас. Вы можете получить доступ к этому получателю и установщику, объявленному kotlin в классах kotlin и JAVA.

Редактировать: В случае, если вы хотите просмотреть сгенерированный класс JAVA для вашего kotlin файл, откройте файл kotlin, затем go в Инструменты -> Kotlin -> Показать Kotlin Байт-код и затем нажмите Отключить ie кнопка присутствует на открытом экране.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...