Подтвердить что ты не робот

Почему мой класс исключения должен быть сериализован?

Когда вы расширяете класс с классом Exception (для создания нового исключения), вы получаете предупреждение о наличии serialVersionUID. Я знаю, что serialVersionUID играет важную роль при сериализации и десериализации, но когда мой Exception необходимо сериализовать? Может ли кто-нибудь дать мне практический случай, в котором я хочу, чтобы мой класс специальных исключений имел сериализацию и десериализацию?

4b9b3361

Ответ 1

Это связано с тем, что корневой класс для всех исключений, Throwable реализует интерфейс Serializable. Все исключения по умолчанию являются сериализуемыми и что решение по языковому дизайну, поскольку авторы хотели, чтобы исключения могли быть отправлены через провод без какой-либо специальной конфигурации.

Если базовый класс не является сериализуемым, вам будет сложно передать то, что было сделано неправильно, если удаленный метод завершился неудачно, так как вы не имели бы контроля над встроенными типами исключений.

Ответ 2

Если ваше настраиваемое исключение когда-либо используется в распределенном приложении (с использованием RMI, Spring http-invoker, что угодно) и может быть выбрано из метода сервера, который вызывается с удаленного клиента, тогда исключение должно быть сериализован, чтобы пересечь провод и перейти к клиенту.

Ответ 3

Ваши единственные опции - либо определить serialVersionUID для каждого типа Exception, который вы определяете (IDE может сгенерировать его для вас), либо подавить предупреждение.

Вы можете найти мой предыдущий вопрос явный serialVersionUID, который считается вредным?.