2013-05-19 3 views
2

я наткнулся на класс обработчика исключений, который распространяется исключение следующим образом:отрицательный serialVersionUID?

public class AppFileReaderException extends Exception { 
    //Explicit serialization UID added 
    private static final long serialVersionUID = -2458461415998318236L; 

    public AppFileReaderException(String msg) 
    { 
     super(msg); 
    } 

автор использовал явную сериализации версии UID и игнорировали то же самое в других аналогичных классов-обработчиков исключений. Исходя из того, что я понял из другого SO post, мы можем игнорировать URI сериализации, если приложение не использует сериализацию и десериализацию. Как ни странно, автор использовал отрицательный UID. Мне любопытно узнать, является ли это действительной или рекомендуемой практикой. Есть ли другая причина использовать отрицательный serialVersionUID?

ответ

11

Есть ли другая причина использовать отрицательный serialVersionUID?

Если вы видите какой-либо «случайная глядя» явно serialVersionUID, это, вероятно, было порождено IDE, как правило, начиная от как UID, который бы был сгенерирован, если явная версия не была предоставлена.

Сериализация версии UID - это как хэш-коды - величина значения фактически не имеет значения; положительные и отрицательные - бессмысленны, кроме как для дифференциации ценностей.

2

Интерфейс seialVersionUID используется для определения совместимости сериализованного объекта с текущей версией класса. Нет никаких ограничений, кроме того, что значение должно быть длинным и что несовместимые версии вашего класса используют разные значения.

2

java.io.Serializable API объясняет, что serialVersionUID может быть рассчитан или исправлен. Рассчитанное значение основано на различных аспектах класса. Он похож на hashCode, который также может быть отрицательным. Существует serialver util в JDK, которому задан класс, можно рассчитать это значение, хотя на практике оно обычно генерируется IDE.

Смежные вопросы