Java/Android SDK中是否存在实现Serializable接口的内置类,还是均为自定义类?
Java/Android 中内置 Serializable 实现类的相关问题解答
嘿,这个问题问得很关键!很多人刚开始接触序列化的时候都会有类似的疑惑,咱们来逐一理清:
1. Java/Android SDK 里确实有大量内置的 Serializable 实现类
当然存在!而且数量非常多,覆盖了你日常开发中常用的很多基础类和工具类,举几个典型的例子:
- Java 基础类:所有基本类型的包装类(
Integer、Boolean、Double等)、String、Date、Calendar、File等; - 集合框架类:
ArrayList、HashMap、HashSet、LinkedList等绝大多数标准集合类; - Android 专属类:虽然 Android 更推荐用
Parcelable做进程间通信,但像Bundle支持存放 Serializable 对象,还有部分系统工具类(比如Notification的内部配置类)也实现了 Serializable。
你可以轻松把这些类的实例转成 Serializable,比如这段代码完全合法:
// String 是内置 Serializable 实现类 Serializable serialStr = (Serializable) "我是可序列化的字符串"; // ArrayList 也是 List<Integer> numList = new ArrayList<>(); numList.add(123); Serializable serialList = (Serializable) numList;
2. 不存在“通用默认类”能强制转成 Serializable
没有任何一个默认基类(比如 Object)实现了 Serializable,所以不是所有对象都能强制转换成 Serializable。只有当某个类(或它的父类)明确实现了 Serializable 接口时,它的实例才能安全地做这种类型转换,否则会抛出 ClassCastException。
举个反例,如果你自定义了一个没实现 Serializable 的类,强制转换就会报错:
class MyCustomClass { private String content; } MyCustomClass obj = new MyCustomClass(); // 这里会抛出 ClassCastException,因为 MyCustomClass 没实现 Serializable Serializable serialObj = (Serializable) obj;
不过有个例外:如果一个类的父类已经实现了 Serializable,那么子类会自动继承这个接口的实现(不需要显式声明),子类实例也可以转成 Serializable。
3. 绝对不是只有自定义类才实现 Serializable
这点完全不用怀疑!刚才列举的那些基础类、集合类都是 Java/Android SDK 自带的官方实现,不需要你自己定义。日常开发中,你甚至会经常用到这些内置的 Serializable 类来传递数据(比如在 Intent 里放 ArrayList,或者用 SharedPreferences 存可序列化对象)。
内容的提问来源于stack exchange,提问作者Lew Wei Hao
相关产品推荐
相关产品推荐

