我需要在Kotlin中澄清@Parcelize
注释。我已经声明了这个枚举类:
@Parcelize
enum class Source : Parcelable {
LIST, MAP
}
该类使用@Parcelize
进行注释以实现Parcelable接口,并且它工作正常,但是当我尝试在意图中传递Parceled类时,我必须强制重新转换为Parcelable,否则编译器会给出“过载分辨率歧义” ”。错误:
过载分辨率模糊。所有这些功能都匹配。 @RecentlyNonNull public open fun putExtra(name:String!,value:Parcelable!):意图!在android.content.Intent中定义@RecentlyNonNull public open fun putExtra(name:String!,value:Serializable!):Intent!在android.content.Intent中定义
val intent = Intent(context, DestinationActivity::class.java)
intent.putExtra(Constants.RETAIL_DETAILS_CLICK_SOURCE_ID, StoreDetailsClicked.Source
.MAP as Parcelable)
为什么编译器会给我这个错误?
这是因为默认情况下枚举是Serializable,当您添加Parcelable时,它会匹配两个方法签名。您可以添加扩展功能来解决歧义:
fun Intent.putParcelableExtra(key: String, value: Parcelable) {
putExtra(key, value)
}
intent.putParcelableExtra(
Constants.RETAIL_DETAILS_CLICK_SOURCE_ID,
StoreDetailsClicked.Source.MAP
)