Android开发中,序列化,反序列化的使用是非常平凡的。通常使用JSON的序列化特性来做,但也可以使用Parcelable接口的特性来实现!
public class CloneUtils {
private static final Gson gson = new GsonBuilder().registerTypeAdapter(Integer.class, new SapIntegerDeserializer())
.registerTypeAdapter(Double.class, new SapDoubleDeserializer())
.create();
/**
* 使用Gson进行对象的深度克隆
*
* @param source 要克隆的对象
* @param clazz 对象的类型
* @param <T> 泛型类型
* @return 克隆后的新对象
*/
public static <T> T deepClone(T source, Class<T> clazz) {
String json = gson.toJson(source);
return gson.fromJson(json, clazz);
}
/**
* 深度拷贝
*
* @param original 原始对象
* @param <T> 泛型
* @return 克隆对象
*/
public static <T extends Parcelable> T deepCopy(T original) {
if (null == original) {
return null;
}
Parcel parcel = Parcel.obtain();
try {
parcel.writeParcelable(original, 0);
parcel.setDataPosition(0);
return parcel.readParcelable(original.getClass()
.getClassLoader());
} finally {
parcel.recycle();
}
}
/**
* 深度拷贝
*
* @param original 需拷贝的原始集合
* @param <T> 泛型
* @return 克隆对象
*/
public static <T extends Parcelable> List<T> deepCopy(List<T> original) {
if (null == original) {
return null;
}
return original.stream()
.map(CloneUtils::deepCopy)
.collect(Collectors.toList());
}
}
文章评论