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

Android Bundle的getSerializable旧方法已弃用,如何获取集合对象?

如何使用Bundle的getSerializable方法获取集合对象?

Android中旧的getSerializable(String?): Serializable?方法已被弃用,现在推荐使用带泛型参数的getSerializable(@Nullable String key, @NonNull Class<T> clazz)方法来安全获取序列化对象,包括集合类。以下是具体用法:

前提条件

  • 集合本身必须实现Serializable接口(Java标准集合类如ArrayList、HashSet默认已实现)
  • 集合内的所有元素也必须实现Serializable接口,否则存储或读取时会抛出NotSerializableException

1. 存储与读取标准集合(以ArrayList为例)

存储集合

// 假设MyBean已实现Serializable接口
ArrayList<MyBean> dataList = new ArrayList<>();
// 添加元素逻辑...
Bundle bundle = new Bundle();
bundle.putSerializable("KEY_USER_LIST", dataList);

读取集合

直接传入集合的具体实现类Class,泛型会自动推导:

ArrayList<MyBean> resultList = bundle.getSerializable("KEY_USER_LIST", ArrayList.class);

注意:由于Java泛型擦除机制,运行时不会校验集合内元素的类型,要确保存储的元素类型与读取时的泛型一致,避免后续操作出现ClassCastException。


2. 读取其他标准集合

对于HashSet、LinkedList等其他实现Serializable的集合类,用法一致:

// 读取HashSet
HashSet<MyBean> resultSet = bundle.getSerializable("KEY_USER_SET", HashSet.class);

// 读取LinkedList
LinkedList<MyBean> resultLinkedList = bundle.getSerializable("KEY_USER_LINKED_LIST", LinkedList.class);

3. 读取自定义集合类

如果是自行实现的、继承标准集合且实现Serializable的自定义集合:

// 自定义集合类示例
public class MyCustomList extends ArrayList<MyBean> implements Serializable {
    // 自定义业务逻辑...
}

// 读取自定义集合
MyCustomList customList = bundle.getSerializable("KEY_CUSTOM_LIST", MyCustomList.class);

常见误区

  • 不能传入集合的接口Class(如List.class、Set.class),因为接口未实现Serializable,且Bundle中存储的是具体实现类对象,类型不匹配会返回null。
  • 若集合元素未实现Serializable,调用putSerializable时会直接抛出异常,务必提前检查元素的序列化实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:00:34