我见过的大多数序列化代码都使用两个标志来指示值的存在/不存在,或者在值前加上一个计数字段(例如,在编写数组时),如果该值不等于,则计数字段仅设置为零。 根本不存在。
检查Android核心类的源代码会发现以下代码(来自Message类):
if (obj != null) {
try {
Parcelable p = (Parcelable)obj;
dest.writeInt(1);
dest.writeParcelable(p, flags);
} catch (ClassCastException e) {
throw new RuntimeException(
"Can't marshal non-Parcelable objects across processes.");
}
} else {
dest.writeInt(0);
}
或这个(来自Intent类):
if (mCategories != null) {
out.writeInt(mCategories.size());
for (String category : mCategories) {
out.writeString(category);
}
} else {
out.writeInt(0);
}
我的建议:在您的代码中,如果“ zoom == null”和“ zoom == 0”之间没有功能上的区别,那么我只需要将zoom声明为原始变量(int而不是Integer),或者将其初始化为零 构造函数,并确保您永远不要将其设置为null(这样就可以保证它永远不会为null,并且您不必在序列化/反序列化方法中添加特殊代码来处理它)。