2015-11-02 2 views
0

Я просто хочу знать, почему мы берем только длинную serialVersionUID переменную типа в JavaСериализация serialversionuid в Java

`public static final long serialVersionUID = 1L;` 

Я имею в виду я знаю, как это работает + то, что сериализации и т.д.

Но я просто любопытно узнать, почему мы берем только примитивный тип? почему не int или какой-либо другой тип?

как этот

public static final int serialVersionUID = 1; 

ли спецификация Java сказать нам, чтобы сделать это?

+0

PLS внимательно прочитал мой вопрос :) –

+0

Этот вопрос является полным дублирующим IMO, но я добавлю, что с помощью 'long' спецификация Java вызывает столкновения между объектами, гораздо менее вероятными, чем использование меньшего типа, такого как' int '. –

ответ

3

Цитата из Документов java.io.Serializable

сериализуемая класс может объявить свой собственный serialVersionUID явно , объявив поле с именем «serialVersionUID», что должен быть статическим, окончательным, и типа длинного ,

Так что да, спецификация говорит нам использовать длинный. В противном случае он не будет распознан как serialVersionUID.

+0

спасибо за ответ, но по какой причине длинный тип? Как @Tim прокомментировал выше bcoz меньше столкновений между объектами –

+1

У меня нет источника для этого, но я думаю, что его просто так долго «длиннее» и, как таковое, может иметь гораздо большее значение, чем int. Я думаю, что они выбрали это, чтобы сделать serialVersionUID максимально возможным. SO с int, если у вас было больше (2^32) -1 различных версий вашего класса, у вас возникла бы проблема. – Chris