Android @Parcelize和enum类-重载解析歧义
我需要澄清Kotlin中的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
@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
)
当然,我现在明白了。一个扩展函数比每次强制转换要好!谢谢你的建议!