You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从getSerializable获取ArrayList对象而非Serializable类型

解决方案

首先需要确保你的自定义MyDay类已经正确实现了Serializable接口,这是序列化传输的前提。

你遇到的问题是getSerializable默认返回的是Serializable?父类类型,只需要做安全的类型转换为MyDay类即可直接访问内部字段,有两种常用写法:

通用兼容写法(兼容所有Android版本)

使用安全类型转换符as?做类型转换,转换失败会直接返回null,不会触发类型转换崩溃:

val args = arguments?.getSerializable(FIVE_DAYS_DATA) as? MyDay

args?.apply {
    // 此处可直接访问MyDay类的内部属性,比如 date、temperature 等自定义字段
}

TargetSdk >= 33 优化写法

如果你的项目目标版本适配到Android 13(API 33)及以上,可以使用官方新增的类型安全重载方法,避免显式强转,同时消除旧方法的废弃警告:

val args = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    arguments?.getSerializable(FIVE_DAYS_DATA, MyDay::class.java)
} else {
    @Suppress("DEPRECATION")
    arguments?.getSerializable(FIVE_DAYS_DATA) as? MyDay
}

注意事项

  • MyDay类内部所有成员属性的类型都需要实现Serializable接口,否则会在序列化/反序列化过程中抛出运行时异常。
  • 若后续对性能有更高要求,推荐改用Android平台原生优化的Parcelable实现序列化,性能远优于Serializable。

内容的提问来源于stack exchange,提问作者SoulReaver313

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:54:03