auto-value-parcel支持哪些类型?10大类Parcelable数据类型完整清单
2026/8/18 17:06:17 网站建设 项目流程

auto-value-parcel支持哪些类型?10大类Parcelable数据类型完整清单

【免费下载链接】auto-value-parcelAn Android Parcelable extension for Google's AutoValue.项目地址: https://gitcode.com/gh_mirrors/au/auto-value-parcel

在 Android 开发中,auto-value-parcel是一个为 Google AutoValue 打造的 Parcelable 扩展库:它通过注解处理器,让所有标注了@AutoValue的类在实现Parcelable时自动生成序列化代码,无需手写writeToParcel()CREATOR。很多新手最关心的问题就是:auto-value-parcel 支持哪些类型?这篇清单将按源码逐一梳理它默认支持的 10 大类 Parcelable 数据类型,帮你快速判断自己的模型类能否直接使用。

一、auto-value-parcel 是什么?

简单说,你只需要把@AutoValue类和Parcelable写在一起,构建时该扩展就会自动补齐序列化逻辑:

@AutoValue public abstract class Foo implements Parcelable { public abstract String bar(); }

编译后即可直接使用 Parcelable 的 Foo。它的类型支持逻辑集中在源码文件auto-value-parcel/src/main/java/com/ryanharter/auto/value/parcel/Parcelables.java中,下面 10 大类全部出自这份代码的读写分支,保证准确可靠。

二、10 大类 Parcelable 数据类型完整清单

1. 八大基本数据类型与包装类:最基础的一类

所有 Java 基本类型都开箱即用:booleanbyteshortintlongfloatdoublechar,对应的包装类BooleanInteger等也完全支持。这是 Android 传递数据最常用的基础类型,也是 auto-value-parcel 默认支持类型的起点。

2. String 与 CharSequence:文本类型全覆盖

String直接调用readString()/writeString()CharSequence则借助TextUtils完成读写。无论是普通字符串还是 Spannable 等文本序列,都能轻松序列化。

3. 数组家族:8 种数组一次说清

数组是高频数据类型,包括:

  • boolean[]byte[]char[]int[]long[]五种基本类型数组
  • String[]字符串数组
  • Parcelable[]可序列化对象数组
  • Object[]通用对象数组

对应createBooleanArray()createByteArray()readStringArray()readParcelableArray()等标准 API,全部原生支持。

4. List 列表集合:传递列表数据最常用

List及其实现类(如ArrayList)可直接读写,使用readArrayList()/writeList()完成。这是跨组件传递一组对象时最常用的类型之一。

5. Map 映射集合:键值对序列化

Map也受支持,但有一个重要限制:键必须是 String,值必须是 Parcelable 类型。这个约束在Parcelables.javaisValidMap()方法中有明确校验,使用时注意泛型写法即可。

6. Guava 不可变集合:Immutable 系列专属支持

ImmutableCollection(如ImmutableListImmutableSet)和ImmutableMap同样受支持,序列化时通过copyOf()重建不可变集合,保证数据不可变特性在传输前后保持一致。

7. Parcelable 对象:嵌套序列化的核心

任何实现了Parcelable接口的自定义类都可以作为属性,通过writeParcelable()/readParcelable()完成嵌套序列化。这也是它名字里 "Parcel" 的由来——支持对象间的任意组合。

8. Android 容器类:SparseArray 与 Bundle 家族

  • SparseArraySparseBooleanArray:Android 特有的稀疏数组容器
  • BundlePersistableBundle:数据传递的万能包裹

这些类型在跨 Activity / Fragment 传值时非常常见,全部无需额外配置。

9. Serializable 序列化对象:Java 传统方案兼容

实现了java.io.Serializable接口的对象也直接支持,通过writeSerializable()/readSerializable()处理。虽然性能不如 Parcelable,但兼容老代码很方便。

10. 特殊类型:Size、SizeF、Enum 与 IBinder

最后一类涵盖几个"小而美"的专属类型:

  • SizeSizeF:Android 尺寸对象(图片、View 测量常用)
  • Enum:枚举类型通过序列化名称字符串实现
  • IBinder:Binder 句柄,跨进程场景会用到

三、不在清单里的类型怎么办?用 TypeAdapter 扩展

如果你的属性类型不在上述 10 大类中(比如DateArrayMap等),auto-value-parcel 提供了扩展机制:自定义一个TypeAdapter,再用@ParcelAdapter注解标记属性即可。相关接口定义在adapter/src/main/java/com/ryanharter/auto/value/parcel/TypeAdapter.java中,配合ParcelAdapter.java注解使用,就能为任意类型定制序列化逻辑。

四、10 大类支持类型速查表

类别代表类型
基本类型与包装类boolean、int、long、float 等 16 种
文本类型String、CharSequence
数组家族boolean[]、byte[]、int[]、String[]、Parcelable[] 等 8 种
列表集合List、ArrayList
映射集合Map(String 键 + Parcelable 值)
Guava 集合ImmutableList、ImmutableMap 等
Parcelable 对象任意实现 Parcelable 的类
Android 容器SparseArray、Bundle、PersistableBundle
Serializable任意实现 Serializable 的类
特殊类型Size、SizeF、Enum、IBinder

总结

以上就是 auto-value-parcel 默认支持的 10 大类 Parcelable 数据类型完整清单,覆盖了 Android 日常开发 90% 以上的场景。上手时只需对照清单确认属性类型,超出范围再考虑 TypeAdapter 自定义方案,就能让 AutoValue 模型类轻松获得 Parcelable 能力,省去大量模板代码。

【免费下载链接】auto-value-parcelAn Android Parcelable extension for Google's AutoValue.项目地址: https://gitcode.com/gh_mirrors/au/auto-value-parcel

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询