Як генерувати серійну версію UID в Intellij


126

Коли я використовував Eclipse, він мав приємну функцію для створення UID серійної версії.

Але що робити в IntelliJ?

Як вибрати або створити однаковий серійний UID UID в IntelliJ?

А що робити, коли ви модифікуєте старий клас?

Якщо ви не вказали id, він генерується під час виконання ...



@JFIB Константа класу serialVersionUIDгенерується компілятором, коли не вказано. Визначення має перевагу (та небезпеку) збереження ідентичного ідентичного тексту для змінених версій класу. Тобто файл з об’єктом старої версії буде прочитаний (дезаріалізований) з новою версією або навпаки.
Joop Eggen

Відповіді:


304

Без плагінів:

Вам просто потрібно ввімкнути підсвітку: (Idea v.2016, 2017 та 2018, попередні версії можуть мати однакові чи подібні налаштування)

Файл -> Установки -> Редактор -> Огляди -> Java -> Проблеми серіалізації -> Клас серіалізації без 'serialVersionUID' - встановіть прапор і натисніть «ОК». (Для Маків налаштування знаходяться в розділі 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, створити тест, створити підклас і зробити пакет приватним. Клас, який я використовую, реалізує одночасно Parcelable та Serializable. Будь-яка ідея?
gonver

Ви перевірили, чи потрібний прапор встановлений у налаштуваннях вище? Випробуваний як у v16, так і v17 ідея, працює чудово. Також перевірте додаткові параметри для такого огляду після натискання на нього у вікні налаштувань (праворуч).
Сергій Максимчук

Я цього не знав і вважаю дуже корисним.
Chaklader Asfak Arefe

62

Найпростіший метод: Alt+ Enterна

private static final long serialVersionUID = ;

IntelliJ підкреслить пробіл після =. покладіть на нього курсор і натисніть alt+ Enter( Option+ Enterна Mac). Ви отримаєте поповер, який говорить "Випадково змінити ініціалізатор serialVersionUID". Просто натисніть Enter, і він заповнить цей простір випадково довгим.


Спасибі працювали для мене у версії IntelliJ IDEA Community Edition, версія 2018.3.3
Тарун

Також у документах Java рекомендується використовувати приватний модифікатор, де це можливо. docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/…
Ілля Лозинський

2
Краще відповідь на вищезгадане.
Акін Окегбіле

32

Встановіть плагін GenerateSerialVersionUID


2
Навіщо встановлювати плагін, коли це легко зробити, як показано на @Serhii нижче.
шаз

2
@shaz Я вважаю за краще, коли ця перевірка відключена, але для деяких класів потрібно отримати явний serialVersionUID. Я не хочу відволікати перевірку на кожен клас, тоді як мені потрібен serialVersionUID лише для одного.
Тимофей

1
Я думаю, що плагін допомагає генерувати значення для підкласів, де батьківський клас також є серіалізаційним та містить a serialVersionUID. Це враховує випадок, коли ви оновили дочірній клас і вам потрібно генерувати новий serialVersionUID для цього класу, не змінюючи serialVersionUID батьківського класу (у випадках, коли в батьківський клас не було внесено змін).
капад

Хоча це може відповісти на питання, краще надати тут фактичну інформацію, а не лише посилання. Відповіді лише на посилання не вважаються хорошими відповідями і, ймовірно, будуть видалені .
еліксинід

3
@EdCottrell Іншої інформації не надається. Або використовуйте плагін чи ні.
Мео

2

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

дуже приємно, дуже просто встановити. ви можете встановити це з меню плагінів, вибрати встановити з диска, вибрати файл jar, який ви розпакували в папці lib. перезапуск, контроль + ins, і він з'являється, щоб генерувати послідовний UID з меню. любити це. :-)


0

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


1
як ви думаєте, як ваша відповідь додає щось нове для вирішення цієї проблеми? Якщо відповідь ні, просто усуньте свою відповідь, бо вона марна.
nazar_art

після додавання плагіна деякі можуть заплутатися в тому, як насправді генерувати UID. Це те, що додається.
mykey

1
Я думаю, що вони можуть прочитати сторінку чоловіка для цього плагіна. Ваша відповідь очевидна.
nazar_art
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.