Если Вы не планируете сериализировать экземпляры, добавьте SuppressWarning.
сгенерированный последовательный идентификатор А может быть немного опасным. Это предполагает, что Вы намеренно дали ему порядковый номер и что это - сохранение, чтобы сериализировать и десериализовать. Легко забыть обновлять порядковый номер в более новой версии Вашего приложения, где Ваш класс изменяется. Десериализация перестанет работать, если поля класса были изменены. Наличие SuppressWarning, по крайней мере, говорит читателю Вашего кода, что Вы не намеревались сериализировать этот класс.
Я не знаю лучшие практики Java, но мне приходит в голову, что, если Вы утверждаете, что сериализации никогда не будет происходить, Вы могли добавить writeObject метод, который бросает. Тогда подавите предупреждение, безопасное в знании, что оно не может возможно относиться к Вам.
Иначе кто-то мог бы в будущем сериализировать Ваш объект через родительский класс и заканчиваться с сериализированной формой значения по умолчанию где:
Добавление идентификатора походит на bodge, начиная с того, что Вы действительно хотите сделать, не, сериализируют. Ожидание, что вызывающие стороны не сериализируют Ваш объект, означает, что Вы ожидаете, что они будут "знать", когда их HttpServlet будет иметь Ваш класс. То нарушение полиморфизма находится на Вашей голове для того, чтобы иметь сериализуемый объект, который не должен быть сериализирован, и наименьшее, которое можно сделать, удостоверяются, что неосторожные вызывающие стороны знают об этом.
Даже если Вы знаете, что этот объект будет сериализирован нет никакой потребности генерировать serialVersionUID, потому что Java автоматически генерирует его для Вас и будет автоматически отслеживать изменения, таким образом, Ваша сериализация будет всегда работать просто великолепно. Необходимо генерировать его, только если Вы знаете то, что Вы делаете (обратная совместимость сериализации, ручное отслеживание изменений и т.д.)
, Таким образом, я сказал бы, что подавление предупреждения является лучшим и самым безопасным решением в большинстве случаев.
Я отказываюсь быть терроризированным Eclipse в добавляющую помеху к моему коду!
я просто настраиваю Eclipse для не генерации предупреждений при пропавших без вести serialVersionUID.
Хорошо генерировать SVUID к каждый класс, реализующий сериализуемый. Причина проста. Вы никогда не знаете, когда это будет сериализировано Вами или некоторой третьей стороной. Там может быть настроен много сервисов, которые сериализируют сервлеты. Поскольку каждый IDE существует плагин, который генерирует один, или просто используйте шаблон и установите svuid = 1L.
То предупреждение сводит меня с ума, потому что каждый раз Вы разделяете класс Swing на подклассы, Вы знаете , Вы никогда не собираетесь сериализировать его, но существует то, что глупое предупреждение. Но да, я позволяю Eclipse генерировать тот.
Позвольте Eclipse генерировать идентификатор. Быстрый и легкий. Предупреждения не состоят в том, чтобы быть проигнорированы. Также сохраняет Вас, большая проблема должна Вы когда-либо переходить к сути дела где объект/has/, чтобы быть сериализированными.
Если Вы не учтете serialVersionUID java, то генерирует один для класса во время компиляции (он изменяется с каждой компиляцией).
При десериализации объектов serialVersionUID десериализованного объекта сравнивается с serialVersionUID класса в jvm. Если они отличаются, их считают несовместимыми, и Исключение выдается. Это может произойти, например, после обновления Вашей программы и десериализации старых классов.
я всегда использую 1L для serialversionUID. Это не причиняет боль (по сравнению со сгенерированным значением по умолчанию), и это все еще оставляет опцию повреждающейся совместимости позже путем постепенного увеличения идентификатора.
Перейдите по этой ссылке для получения подробного объяснения: http://technologiquepanorama.wordpress.com/2009/02/13/what-is-use-of-serialversiouid/
Спасибо @ Steve Jessop за его ответ. Это было 5 строк кода ... не было проблем.
Я добавил @SuppressWarnings ("serial")
чуть выше рассматриваемого класса.
Я также добавил этот метод:
private void writeObject(ObjectOutputStream oos) throws IOException {
throw new IOException("This class is NOT serializable.");
}
Надеюсь, Стив имел в виду именно это :)