В большинстве кодов сериализации, которые я видел, используются либо флаги, чтобы указать наличие / отсутствие значения, ИЛИ предшествует значению поле счетчика (например, при записи массивов), где поле счетчика просто устанавливается в ноль, еслизначение вообще не существует.
Изучение исходного кода основных классов 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
) ИЛИ инициализируйте его в ноль в конструкторе и убедитесь, что вы никогда не установите его в ноль (тогда вы можете быть уверены, что он никогда не будет нулевым, и вам не придется добавлять специальный кодчтобы справиться с этим в ваших методах сериализации / десериализации).