我需要澄清 @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/