Серийная версия uid в классе абстрактных исключений - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть базовый класс пользовательских исключений BaseException

public class BaseException extends RuntimeException {

}

и несколько пользовательских исключений, расширяющих BaseException

public class CustomException extends BaseException {
 private static final long serialVersionUID = 3655655808021733968L;
}

Я получил предупреждение о том, что серийная версия uid не объявлено в классе BaseException. Нужно ли это в абстрактном классе? Это хорошая практика? Есть ли способ избавиться от предупреждения?

1 Ответ

1 голос
/ 29 апреля 2020

Да, вам нужно определить serialVersionUID в абстрактном классе. Сериализация сериализует состояние экземпляра, что обычно означает нестати c поля; любое унаследованное состояние должно быть сериализовано вместе с остальным состоянием объекта.

Тот факт, что у вас нет полей в BaseException, не означает, что вы должны пропустить serialVersionUID.

Примечание что вопреки распространенному мнению, serialVersionUID не обязательно должен основываться на ha sh имени или структуры класса. Это делает только вычисленный по умолчанию UID серийной версии , когда класс явно не определяет поле serialVersionUID. Обычно вы можете объявить его простым числом:

private static final long serialVersionUID = 1;
...