getParcelableArrayListExtra已废弃,API33下的替代方案是什么?
解决方案
当targetSdkVersion与compileSdkVersion升级至33后,getParcelableArrayListExtra<T>方法因类型安全隐患被标记为过时,官方推荐使用带显式Class参数的重载方法,具体修改如下:
原代码:
val picList = result.data?.getParcelableArrayListExtra<PageNumberFile>(KEY_CAM_PIC_LIST)
修改后代码:
val picList = result.data?.getParcelableArrayListExtra(KEY_CAM_PIC_LIST, PageNumberFile::class.java)
核心原因
- 旧泛型方法依赖Java类型擦除机制,编译阶段无法校验返回集合的元素类型,运行时可能出现类型转换异常
- 新重载方法通过传入
Class<T>实例,让系统在编译、运行阶段都能严格校验类型,彻底消除类型安全警告
如果你的PageNumberFile实现的是Serializable接口而非Parcelable,可使用以下方式处理(但仍优先推荐Parcelable方案,因为Android平台下Parcelable序列化效率更高):
val picList = result.data?.getSerializableExtra(KEY_CAM_PIC_LIST) as? ArrayList<PageNumberFile>
内容的提问来源于stack exchange,提问作者Abdur Rehman
相关产品推荐
相关产品推荐

