我需要对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)
为什么编译器会给我这个错误?
答案 0 :(得分:1)
这是因为默认情况下枚举是可序列化的,并且当您添加Parcelable时,它会同时匹配两个方法签名。您可以添加扩展功能来解决歧义:
fun Intent.putParcelableExtra(key: String, value: Parcelable) {
putExtra(key, value)
}
intent.putParcelableExtra(
Constants.RETAIL_DETAILS_CLICK_SOURCE_ID,
StoreDetailsClicked.Source.MAP
)