2.7 处理数组
在实现完整版的 serializeObject 之前, 考虑 序列化对象 是 数组 的情况,如果把数组 强制类型转换 为 Object[],当数组为 原始类型数组 时,类型转换将抛出 ClassCastException 异常。
原始类型数组 & 对象数组
数组需要分为两种情况,即原始类型组成的数组,和对象数组,对于对象数组,强制类型转换 仅仅 适用于对象数组,对原始类型数组不适用。我们需要一种 统一 的处理数组的方式。
java.lang.reflect.Array 提供了对 所有类型 数组的 反射操作,包括:获取数组长度、访问数组元素、实例化数组对象等等,该类提供的方法如下:
| 方法签名 | 说明 |
|---|---|
| Object newInstance(Class componentType, int length) | 创建一个元素类型为 componentType 长度为 length 的数组 |
| Object newInstance(Class componentType, int[] dimensions) | 创建一个元素类型为 componentType,数组 维度 为 dimensions.length 的数组 |
| int getLength(Object obj) | 返回 obj 数组的长度 |
| Object get(Object array, int index) | 返回数组 array 的 index 位置的元素 |
| boolean getBoolean(Object array, int index) | 如果 数组元素为 boolean,则返回 index 位置的元素 |
| void set(Object array, int index, Object value) | 将数组 array 的 index 位置上的值设置为 value |
| void setBoolean(Object array, int index, boolean value) | 如果 数组元素类型为 boolean,则将 index 位置的元素值设置为 value |
注意
- 数组类型 用
Object表示。 newInstance(Class type, int[] dimensions)中,数组维度 用dimensions.length表示。