Классы @Parcelize и enum - неоднозначность разрешения перегрузки - PullRequest
0 голосов
/ 26 апреля 2019

Мне нужно разъяснение по поводу @Parcelize аннотации в Котлине.Я объявил этот класс перечисления:

 @Parcelize
 enum class Source : Parcelable {
    LIST, MAP
 }

Класс помечен @Parcelize для реализации интерфейса Parcelable, и он работает нормально, однако, когда я пытаюсь передать класс Parceled в намерении, которое я имеюдля принудительного повторного приведения в Parcelable, иначе компилятор выдаст мне « Неопределенность разрешения перегрузки ».ошибка:

Неоднозначность разрешения перегрузки.Все эти функции совпадают.@RecentlyNonNull публичное открытое веселье putExtra (name: String !, value: Parcelable!): Intent!определено в android.content.Intent @RecentlyNonNull Публичное открытое веселье putExtra (name: String !, значение: Serializable!): Intent!определено в android.content.Intent

val intent = Intent(context, DestinationActivity::class.java)
intent.putExtra(Constants.RETAIL_DETAILS_CLICK_SOURCE_ID, StoreDetailsClicked.Source
                    .MAP as Parcelable)

Почему компилятор выдаёт мне эту ошибку?

1 Ответ

2 голосов
/ 26 апреля 2019

Это потому, что перечисления по умолчанию являются сериализуемыми, и когда вы добавляете Parcelable, он совпадает с обеими сигнатурами методов.Вы можете добавить функцию расширения для устранения неоднозначности:

fun Intent.putParcelableExtra(key: String, value: Parcelable) {
    putExtra(key, value)
}

intent.putParcelableExtra(
    Constants.RETAIL_DETAILS_CLICK_SOURCE_ID, 
    StoreDetailsClicked.Source.MAP
)
...