android - @Parcelize 和枚举类 - 重载解析歧义

标签 android kotlin enums parcelable parcel

我需要澄清 @Parcelize Kotlin 中的注释。我已经声明了这个枚举类:

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

该类使用 @Parcelize 进行注释为了实现 Parcelable 接口(interface)并且它工作正常,但是当我尝试传递 Parceled 类时,我必须强制重新转换为 Parcelable,否则编译器会给我一个“重载分辨率歧义 ”。错误:

Overload resolution ambiguity. All these functions match. @RecentlyNonNull public open fun putExtra(name: String!, value: Parcelable!): Intent! defined in android.content.Intent @RecentlyNonNull public open fun putExtra(name: String!, value: Serializable!): Intent! defined in android.content.Intent



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

为什么编译器会给我这个错误?

最佳答案

这是因为枚举默认是可序列化的,当你添加 Parcelable 时,它​​匹配两个方法签名。您可以添加扩展函数来解决歧义:

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

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

关于android - @Parcelize 和枚举类 - 重载解析歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55870024/

相关文章:

android - 如何在 Picasso 中使用磁盘缓存?

android - 如何从 paymentData 获取 Base64 编码的 token ?

java - 为什么方向改变后仍然显示该 fragment ?

android - Kotlin DataBinding : IncompleteAnnotationException: android. databinding.BindingBuildInfo 缺少元素

java - java中lateinit相对于null初始化的优势?

java - 在 Retrofit 上观察 Observable 时发生 OnError

c# - 检查通用方法中包含哪些类型的枚举

java - 重用静态初始化 block

c# - C# 枚举中的方法

android - Javah 找不到 khronos.opengles.GL10