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 基本类型都开箱即用:boolean、byte、short、int、long、float、double、char,对应的包装类Boolean、Integer等也完全支持。这是 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.java的isValidMap()方法中有明确校验,使用时注意泛型写法即可。
6. Guava 不可变集合:Immutable 系列专属支持
ImmutableCollection(如ImmutableList、ImmutableSet)和ImmutableMap同样受支持,序列化时通过copyOf()重建不可变集合,保证数据不可变特性在传输前后保持一致。
7. Parcelable 对象:嵌套序列化的核心
任何实现了Parcelable接口的自定义类都可以作为属性,通过writeParcelable()/readParcelable()完成嵌套序列化。这也是它名字里 "Parcel" 的由来——支持对象间的任意组合。
8. Android 容器类:SparseArray 与 Bundle 家族
SparseArray、SparseBooleanArray:Android 特有的稀疏数组容器Bundle、PersistableBundle:数据传递的万能包裹
这些类型在跨 Activity / Fragment 传值时非常常见,全部无需额外配置。
9. Serializable 序列化对象:Java 传统方案兼容
实现了java.io.Serializable接口的对象也直接支持,通过writeSerializable()/readSerializable()处理。虽然性能不如 Parcelable,但兼容老代码很方便。
10. 特殊类型:Size、SizeF、Enum 与 IBinder
最后一类涵盖几个"小而美"的专属类型:
Size、SizeF:Android 尺寸对象(图片、View 测量常用)Enum:枚举类型通过序列化名称字符串实现IBinder:Binder 句柄,跨进程场景会用到
三、不在清单里的类型怎么办?用 TypeAdapter 扩展
如果你的属性类型不在上述 10 大类中(比如Date、ArrayMap等),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),仅供参考