@Parcelize和Enum类-重载解析度歧义

时间:2019-04-26 14:45:44

标签: android kotlin enums parcelable parcel

我需要对Kotlin中的@Parcelize注解进行说明。我已经声明了这个枚举类:

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

为了实现Parcelable接口,该类用@Parcelize进行了注释,并且可以正常工作,但是,当我试图通过意图将Parceled类传递给我时,必须强制将其重新转换为Parcelable,否则编译器给我一个“ 超载分辨率的歧义”。错误:

  

重载分辨率含糊不清。所有这些功能都匹配。   @RecentlyNonNull公共打开乐趣putExtra(name:String !, value:Parcelable!):意向!在android.content.Intent中定义   @RecentlyNonNull公共打开乐趣putExtra(name:String !, value:Serializable!):意向!在android.content.Intent中定义

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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