@Parcelize和enum类 - 重载分辨率模糊

问题描述 投票:0回答:1

我需要在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)

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

android kotlin enums parcelable parcel
1个回答
1
投票

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

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

intent.putParcelableExtra(
    Constants.RETAIL_DETAILS_CLICK_SOURCE_ID, 
    StoreDetailsClicked.Source.MAP
)
© www.soinside.com 2019 - 2024. All rights reserved.