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
相关产品推荐
相关产品推荐

