Cara menghasilkan UID versi serial di Intellij

126

Ketika saya menggunakan Eclipse , ada fitur bagus untuk menghasilkan UID versi serial.

Tapi apa yang harus dilakukan di IntelliJ?

Bagaimana cara memilih atau menghasilkan UID versi serial yang identik di IntelliJ?

Dan apa yang harus dilakukan saat Anda memodifikasi kelas lama?

Jika Anda belum menentukannya id, ini dibuat saat runtime ...

nazar_art
sumber
1
Duplikat stackoverflow.com/questions/12912287/…
Bruno Volpato
@JFIB Konstanta kelas serialVersionUIDdihasilkan oleh kompilator jika tidak ditentukan. Menentukan memiliki keuntungan (dan bahaya) menjaga identitas tetap identik untuk versi kelas yang diubah. Artinya file dengan objek versi lama akan dibaca (deserialized) dengan versi baru atau sebaliknya.
Joop Eggen

Jawaban:

304

Tanpa plugin apa pun:

Anda hanya perlu mengaktifkan sorotan: (Idea v. 2016, 2017 dan 2018, versi sebelumnya mungkin memiliki pengaturan yang sama atau serupa)

File -> Pengaturan -> Editor -> Inspeksi -> Java -> Masalah serialisasi -> Kelas berseri tanpa 'serialVersionUID' - atur bendera dan klik 'OK'. (Untuk Mac, Pengaturan ada di bawah IntelliJ IDEA -> Preferensi ...)

Sekarang, jika kelas Anda mengimplementasikan Serializable, Anda akan melihat sorotan dan alt + Enter pada nama kelas akan diusulkan untuk dihasilkan private static final long serialVersionUID.

UPD: cara yang lebih cepat untuk menemukan pengaturan ini - Anda dapat menggunakan hotkey Ctrl+Shift+A(menemukan tindakan), ketik Serializable class without 'serialVersionUID'- yang pertama adalah yang pertama.

Serhii Maksymchuk
sumber
2
@SalilJunior Tidak juga. Kemampuan bawaan untuk menghasilkan serialVersionUID terkait dengan peringatan inspeksi. Anda terhenti saat Anda tidak ingin mengaktifkan peringatan inspeksi tetapi menghasilkan serialVersionUID dalam beberapa kasus.
Fabian Barney
Solusi ini tidak berfungsi untuk saya, saya hanya dapat melihat opsi: hapus Implementasi Parcelable, ganti implementasi parcelable, buat pengujian, buat subkelas, dan buat paket-privat. Kelas yang saya gunakan mengimplementasikan Parcelable dan Serializable pada waktu yang sama. Ada ide?
gonver
Sudahkah Anda memeriksa bahwa bendera yang diperlukan disetel dalam pengaturan di atas? Diuji di ide v16 dan v17, berfungsi dengan baik. Periksa juga pengaturan tambahan untuk pemeriksaan tersebut setelah mengkliknya di jendela pengaturan (di sebelah kanan).
Serhii Maksymchuk
Saya tidak mengetahui hal ini dan merasa sangat membantu.
Chaklader Asfak Arefe
62

Metode termudah: Alt+ Enteraktif

private static final long serialVersionUID = ;

IntelliJ akan menggarisbawahi spasi setelah =. letakkan kursor Anda di atasnya dan tekan alt+ Enter( Option+ Enterdi Mac). Anda akan melihat popover yang bertuliskan "Randomly Change serialVersionUID Initializer". Cukup tekan enter, dan itu akan mengisi ruang itu dengan panjang acak.

jeremysprofile
sumber
Terima kasih bekerja untuk saya di IntelliJ IDEA Community Edition versi 2018.3.3
Tarun
Juga disarankan dalam dokumen java untuk menggunakan pengubah privat jika memungkinkan. docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/…
Ilya Lozinsky
2
Jawaban yang lebih baik untuk yang di atas.
Akin Okegbile
32

Instal plugin GenerateSerialVersionUID

Meo
sumber
2
Mengapa memasang plugin saat ini dapat dengan mudah dilakukan seperti yang ditunjukkan oleh @Serhii di bawah ini.
shaz
2
@ shaz Saya lebih suka ketika pemeriksaan itu dinonaktifkan, tetapi untuk beberapa kelas mendapatkan serialVersionUID eksplisit diperlukan. Saya tidak ingin inspeksi mengganggu pada setiap kelas sementara saya hanya memerlukan serialVersionUID untuk satu kelas.
Timofey
1
Saya pikir plugin membantu menghasilkan nilai untuk subclass di mana kelas induk juga dapat bersambung dan berisi file serialVersionUID. Ini menangani kasus ketika Anda telah memperbarui kelas anak dan perlu membuat serialVersionUID baru untuk kelas ini tanpa mengubah serialVersionUID kelas induk (dalam kasus di mana tidak ada perubahan yang dibuat ke kelas induk).
kapad
Meskipun ini mungkin menjawab pertanyaan, lebih baik memberikan informasi sebenarnya di sini dan bukan hanya tautan. Jawaban link saja tidak dianggap sebagai jawaban yang baik dan mungkin akan dihapus .
elixenide
3
@EdCottrell Tidak ada informasi lain yang akan diberikan. Gunakan plugin atau tidak.
Meo
2

IntelliJ IDEA Plugins / GenerateSerialVersionUID https://plugins.jetbrains.com/plugin/?idea&id=185

sangat bagus, sangat mudah dipasang. Anda dapat menginstalnya dari menu plugin, pilih instal dari disk, pilih file jar yang Anda buka di folder lib. restart, control + in, dan muncul untuk menghasilkan serial UID dari menu. suka. :-)

Patch Rhythm
sumber
0

dengan di editor kode, Buka kelas yang UID-nya ingin Anda buat, Klik kanan -> Generate -> SerialVersionUID. Anda mungkin perlu menginstal plugin GenerateSerialVersionUID agar ini berfungsi.

kunci saya
sumber
1
Menurut Anda bagaimana jawaban Anda menambahkan sesuatu yang baru untuk memecahkan masalah ini? Jika jawabannya tidak, hilangkan saja jawaban Anda, karena tidak ada gunanya.
nazar_art
setelah menambahkan plugin, beberapa orang mungkin bingung tentang bagaimana sebenarnya menghasilkan UID. Itulah yang ditambahkan.
mykey
1
Saya kira mereka dapat membaca halaman manual untuk plugin itu. Jawaban Anda jelas.
nazar_art