Сериализуемое предупреждение Java, когда атрибут не перегружен - PullRequest
1 голос
/ 07 сентября 2011

Как Java-компилятор предупреждает вас о том, что вы не можете объявить поле serialVersionUID uid?Есть ли способ, которым я могу сделать это для пользовательского интерфейса или это волшебство языка Java?

Редактировать:

Мой вопрос не столько о сериализуемом интерфейсе, я понимаю это.Но как это генерирует предупреждение?Я хочу реализовать то же самое (предупреждаю, если классы, реализующие мой интерфейс, не предоставляют определенного атрибута), но я не вижу ничего о том, как сериализуемый это делает.

Ответы [ 3 ]

2 голосов
/ 07 сентября 2011

Он не предупредит вас, он просто сгенерирует для вас serialVersionUID в молчании.Однако большинство IDE будут вызывать предупреждения для Serializable классов без этого поля (по причине).

См. Также: Использовать serialVersionUID или подавлять предупреждения?

1 голос
/ 07 сентября 2011

Как говорят другие ответы, предупреждение, которое вы ищете, очень специфично для Serializable.

В общем случае интерфейс не может указать, какие поля должны существовать в классах, которые его реализуют. На самом деле это базовый дизайн ОО - поле - это реализация, а не интерфейс.

Для ваших нужд, возможно, было бы лучше иметь метод в интерфейсе, getTheField(). Классы, реализующие интерфейс, затем потребуются для реализации этого метода. Они могут или не могут сделать это, используя личное поле для хранения данных, но это похоже на внутренние детали реализации, которые не должны иметь значения для вызывающих.

1 голос
/ 07 сентября 2011

Я не совсем уверен, о чем ты спрашиваешь.Это особенность интерфейса Serializable, я думаю, в сочетании с опциями стиля кода Eclipse (или любой IDE, которую вы используете), которая генерирует это предупреждение.Если вы включите опции стиля кода (которые обычно дают вам ряд предупреждений о включении, чтобы IDE могла помочь вам сохранить ваш код в чистоте), я думаю, вы найдете параметр, который генерирует это предупреждение.

Цель предупреждения, если вам интересно, заключается в том, что serialVersionUID используется для уникальной идентификации сериализованного объекта.Когда ваш код пытается десериализовать этот объект (скажем, из файла), если вы используете стандартные методы сериализации в Java, JVM выдаст ошибку, когда serialVerionUID для класса, который вы пытаетесь десериализовать, не совпадает с указанным в файле соответствия.Это один из способов загрузки JVM сериализованного объекта, который содержит предыдущую / альтернативную версию данного объекта / структуры данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...