Android @Parcelize和enum类-重载解析歧义

Android @Parcelize和enum类-重载解析歧义,android,kotlin,enums,parcelable,parcel,Android,Kotlin,Enums,Parcelable,Parcel,我需要澄清Kotlin中的@Parcelize注释。我已声明此枚举类: @Parcelize 枚举类源:可包裹{ 列表、地图 } 该类使用@Parcelize进行注释,以实现Parcelable接口,并且工作正常,但是当我试图通过Parceled类时,我必须强制重新转换为Parcelable,否则编译器会给我一个“重载解析模糊度”。错误: 过载分辨率模糊。所有这些功能都匹配。 @RecentlyNonNull public open fun putExtra(名称:String!,值:Parc

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

@Parcelize
枚举类源:可包裹{
列表、地图
}
该类使用
@Parcelize
进行注释,以实现Parcelable接口,并且工作正常,但是当我试图通过Parceled类时,我必须强制重新转换为Parcelable,否则编译器会给我一个“重载解析模糊度”。错误:

过载分辨率模糊。所有这些功能都匹配。 @RecentlyNonNull public open fun putExtra(名称:String!,值:Parcelable!):意图!在android.content.Intent中定义 @RecentlyNonNull public open fun putExtra(名称:String!,值:Serializable!):Intent!在android.content.Intent中定义

val intent=intent(上下文,DestinationActivity::class.java)
intent.putExtra(Constants.RETAIL\u DETAILS\u CLICK\u SOURCE\u ID,StoreDetailsClicked.SOURCE
(以可包裹的形式提供地图)

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

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

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

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

当然,我现在明白了。一个扩展函数比每次强制转换要好!谢谢你的建议!