Как сгенерировать UID серийной версии в Intellij

129

Когда я использовал Eclipse, у него была замечательная возможность генерировать UID серийной версии.

Но что делать в IntelliJ?

Как выбрать или сгенерировать идентичный UID серийной версии в IntelliJ?

А что делать при модификации старого класса?

Если вы не указали id, он создается во время выполнения ...

nazar_art
источник
1
Дубликат stackoverflow.com/questions/12912287/…
Бруно Вольпато
@JFIB Константа класса serialVersionUIDсоздается компилятором, если не указана. Указание имеет преимущество (и опасность) сохранения идентификатора идентичным для измененных версий класса. То есть файл с объектом старой версии будет прочитан (десериализован) с новой версией или наоборот.
Joop Eggen

Ответы:

307

Без каких-либо плагинов:

Вам просто нужно включить подсветку: (Идея v.2016, 2017 и 2018, предыдущие версии могут иметь такие же или похожие настройки)

Файл -> Настройки -> Редактор -> Инспекции -> Java -> Проблемы с сериализацией -> Сериализуемый класс без «serialVersionUID» - установите флаг и нажмите «ОК». (Для Mac настройки находятся в IntelliJ IDEA -> Настройки ...)

Теперь, если ваш класс реализует Serializable, вы увидите выделение и alt + Enter на имени класса предложит сгенерировать private static final long serialVersionUID.

UPD: более быстрый способ найти эту настройку - вы можете использовать горячую клавишу Ctrl+Shift+A(действие найти), введите Serializable class without 'serialVersionUID'- первая первая.

Сергей Максимчук
источник
2
@SalilJunior Не совсем. Встроенная возможность генерировать serialVersionUID привязана к предупреждениям проверки. Вы застряли, если не хотите включать предупреждение проверки, но в некоторых случаях генерируют serialVersionUID.
Фабиан Барни,
Это решение не работает для меня, я вижу только варианты: удалить Parcelable Implementation, заменить parcelable implementation, создать тест, создать подкласс и сделать пакет частным. Класс, который я использую, одновременно реализует Parcelable и Serializable. Любая идея?
gonver
Вы проверили, установлен ли нужный флаг в настройках выше? Протестировано как в v16, так и в v17, работает нормально. Также проверьте дополнительные настройки для такой проверки, щелкнув по ней в окне настроек (справа).
Сергей Максимчук
Я этого не знал и считаю очень полезным.
Чакладер Асфак Арефе
63

Самый простой способ: Alt+ Enterна

private static final long serialVersionUID = ;

IntelliJ подчеркнет пробел после =. наведите на него курсор и нажмите alt+ Enter( Option+ Enterна Mac). Вы получите всплывающее окно с надписью «Произвольно изменить инициализатор serialVersionUID». Просто нажмите Enter, и он заполнит это место произвольной длинной.

jeremysprofile
источник
Спасибо сработало для меня в IntelliJ IDEA Community Edition версии 2018.3.3
Тарун
В документации java также рекомендуется использовать модификатор private, где это возможно. docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/…
Илья Лозинский
2
Лучше ответьте на предыдущий.
Akin Okegbile
32

Установите плагин GenerateSerialVersionUID

Meo
источник
2
Зачем устанавливать плагин, если это легко сделать, как показано @Serhii ниже.
shaz
2
@shaz Я предпочитаю, когда эта проверка отключена, но для некоторых классов требуется явное получение serialVersionUID. Я не хочу отвлекать внимание на каждый класс, а serialVersionUID нужен только для одного.
Тимофей
1
Я думаю, что этот плагин помогает генерировать значения для подклассов, где родительский класс также сериализуем и содержит serialVersionUID. Это позаботится о случае, когда вы обновили дочерний класс и вам нужно сгенерировать новый serialVersionUID для этого класса без изменения serialVersionUID родительского класса (в тех случаях, когда в родительский класс не было внесено никаких изменений).
капад 02
Хотя это может дать ответ на вопрос, лучше предоставить здесь актуальную информацию, а не просто ссылку. Ответы, содержащие только ссылки, не считаются хорошими ответами и, вероятно, будут удалены .
elixenide
3
@EdCottrell Нет никакой другой информации. Либо использовать плагин, либо нет.
Meo
2

Плагины IntelliJ IDEA / GenerateSerialVersionUID https://plugins.jetbrains.com/plugin/?idea&id=185

очень красиво, очень просто установить. вы можете установить это из меню плагинов, выбрать установку с диска, выбрать файл jar, который вы распаковали в папке lib. перезапустите, control + ins, и он появится, чтобы сгенерировать серийный UID из меню. любить это. :-)

Патч Ритм
источник
0

с помощью в редакторе кода откройте класс, для которого вы хотите создать UID, щелкните правой кнопкой мыши -> Создать -> SerialVersionUID. Возможно, вам понадобится установить плагин GenerateSerialVersionUID, чтобы это работало.

мой ключ
источник
1
как вы думаете, ваш ответ добавляет что-то новое для решения этой проблемы? Если нет, просто исключите свой ответ, потому что он бесполезен.
nazar_art 06
после добавления плагина некоторые могут запутаться в том, как на самом деле генерировать UID. Вот что добавлено.
mykey
1
Думаю, они могут прочитать справочную страницу этого плагина. Ваш ответ очевиден.
nazar_art