@Parcelize 和 enum 类 - 重载解析歧义
@Parcelize and enum classes - Overload resolution ambiguity
我需要澄清一下 Kotlin 中的 @Parcelize
注释。我已经声明了这个枚举 class:
@Parcelize
enum class Source : Parcelable {
LIST, MAP
}
class 用 @Parcelize
注释以实现 Parcelable 接口并且它工作正常,但是当我尝试传递 Parceled class 意图时我必须强制重新转换为 Parcelable,否则编译器会给我一个“Overload resolution ambiguity”。错误:
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
)
我需要澄清一下 Kotlin 中的 @Parcelize
注释。我已经声明了这个枚举 class:
@Parcelize
enum class Source : Parcelable {
LIST, MAP
}
class 用 @Parcelize
注释以实现 Parcelable 接口并且它工作正常,但是当我尝试传递 Parceled class 意图时我必须强制重新转换为 Parcelable,否则编译器会给我一个“Overload resolution ambiguity”。错误:
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
)