Как сгенерировать это значение в IntelliJ IDEA?
Я иду в Настройки -> Ошибки -> Проблемы с сериализацией -> Сериализуемый класс без 'serialVersionUID', но он все равно не показывает мне предупреждение. Мой класс PKladrBuilding реализует интерфейс Serializable .
Часть кода:
public class PKladrBuilding extends PRQObject
public abstract class PRQObject extends PObject
public abstract class PObject implements Serializable
java
serialization
intellij-idea
Кирилл Базаров
источник
источник
1L
как ваш идентификатор и приращение при изменении вашей сериализованной формы. (См. Stackoverflow.com/questions/888335/… ).Ответы:
Я не уверен, что у вас есть старая версия IntelliJ IDEA, но если я зайду в меню Файл → Настройки ... → Проверки → Проблемы с сериализацией → Сериализуемый класс без включенного «serialVersionUID», то класс, который вы предоставляете, дает мне предупреждения.
Если я попробую первый класс, я увижу:
Кстати: он не показывал мне предупреждение, пока я не добавил
{ }
в конец каждого класса, чтобы исправить ошибку компиляции.источник
File
|Invalidate Caches
, если это не поможет, свяжитесь с support@jetbrains.com с примером проекта для воспроизведения.idea.log
(Help | Reveal Log in ...) на наличие исключений: известно, что зашифрованный домашний каталог в Linux вызывает проблемы из-за ошибки в ядре .Установите плагин GenerateSerialVersionUID от Оливье Дескью.
Перейдите: меню Файл → Настройки → Плагины → Обзор репозиториев →
GenerateSerialVersionUID
Установите плагин и перезапустите.
Теперь вы можете сгенерировать идентификатор из меню Code → Generate → serialVersionUID` или ярлыка.
источник
Без каких-либо плагинов: вам просто нужно включить подсветку в IntelliJ:
IntelliJ Preferences -> Editor -> Inspections -> Java -> Serialization issues -> Serializable class without 'serialVersionUID'
- установите флаг и нажмите'OK'
.Теперь, если ваш класс реализует
Serializable
, вы увидите выделение, аalt+Enter
по имени класса предложите сгенерироватьprivate static final long serialVersionUID
.PS: взято отсюда
источник
Потратив некоторое время на сериализацию, я обнаружил, что мы не должны генерировать
serialVersionUID
с каким-то случайным значением, мы должны придать ему значимое значение.Вот подробный комментарий по этому вопросу. Я справляюсь с комментарием здесь.
Надеюсь это поможет. Удачи.
источник
serialVersionUID
бы новое случайное число, если я не хочу поддерживать старые версии при десериализации. Возможно, мне не нужно использовать случайные числа, но я могу начать с 1 и увеличивать его. Тем3L
не менее, не имеет больше значения для меня тогда-3518231192373568183L
. Поэтому, я думаю, оба решения работают одинаково. Случайное число может иметь преимущество в том, что оно просыпается в нелинейных историях с вилками и ветвями.Для генерации стоимости используйте
и предоставьте переменную шаблона randomLong со следующим значением: groovyScript ("new Random (). nextLong (). abs ()")
https://pharsfalvi.wordpress.com/2015/03/18/adding-serialversionuid-in-idea/
источник
Кроме того, вы можете добавить живой шаблон, который будет делать эту работу.
Для этого нажмите Ctrl+Alt+S->
"Live Templates"
раздел ->other
(или по желанию)А затем создайте новый с таким определением:
Затем выберите
definition
область и сохраните ее как'serial'
Теперь вы можете ввести
serial
TABтело класса.источник
Другой способ создания serialVersionUID - использовать
>Analyze >Run Inspection by Name
из контекстного меню (или сочетания клавиш, которое по умолчанию ctrl+ alt+ shift+ i), а затем ввести «Serializable class без« serialVersionUID »» (или просто ввести «serialVersionUID» и тип вперед. Функция найдет его для вас.Затем вы получите контекстное меню, в котором вы можете выбрать, где проводить проверки (например, все из определенного модуля, всего проекта, одного файла, ...)
При таком подходе вам даже не нужно устанавливать общие правила проверки.
источник
С версией
v2018.2.1
Перейти к
Предупреждение должно появиться рядом с объявлением класса.
источник
Я использую Android Studio 2.1, и у меня есть лучшая последовательность получения лампочки, нажав на имя класса и наведя на него курсор на секунду.
источник
Добавьте живой шаблон с именем ser в другую группу, установите для него значение «Применимо в Java: объявление» и снимите флажок «Сократить имена FQ». Дайте ему текст шаблона просто:
Теперь отредактируйте переменные и задайте для serial:
Предполагается стандартная компоновка проекта Gradle. Изменить / построить / на / цель / для Maven.
источник
Самый простой современный метод:
Alt
+Enter
наIntelliJ подчеркнет пространство после
=
. наведите на него курсор и нажмитеalt
+Enter
(Option
+Enter
на Mac). Вы получите всплывающее окно с надписью «Произвольно изменить инициализатор serialVersionUID». Просто нажмите Enter, и он заполнит это место случайным длинным.источник
Если вы хотите добавить отсутствующий serialVersionUID для группы файлов, IntelliJ IDEA может работать не очень хорошо. Я придумаю простой сценарий для легкого выполнения этой цели:
Вы сохраняете этот скрипт, скажем, как
add_serialVersionUID.sh
в вашей~/bin
папке. Затем вы запускаете его в корневом каталоге вашего проекта Maven или Gradle, например:Это .lst включает в себя список файлов Java для добавления serialVersionUID в следующем формате:
Этот скрипт использует инструмент JDK serialVer. Это идеально для ситуации, когда вы хотите изменить огромное количество классов, для которых не был установлен serialVersionUID, в первую очередь, при сохранении совместимости со старыми классами.
источник