Bagaimana cara menghasilkan nilai ini di IntelliJ IDEA?
Saya pergi ke Pengaturan -> Kesalahan -> Masalah serialisasi -> Kelas serializable tanpa 'serialVersionUID', tetapi masih tidak menunjukkan peringatan kepada saya. Induk PKladrBuilding kelas saya mengimplementasikan antarmuka Serializable .
Bagian dari kode:
public class PKladrBuilding extends PRQObject
public abstract class PRQObject extends PObject
public abstract class PObject implements Serializable
java
serialization
intellij-idea
Kirill Bazarov
sumber
sumber
1L
sebagai ID Anda dan kenaikan ketika bentuk serial Anda berubah. (Lihat stackoverflow.com/questions/888335/… ).Jawaban:
Saya tidak yakin apakah Anda memiliki IntelliJ IDEA versi lama, tetapi jika saya masuk ke menu File → Settings ... → Inspeksi → Masalah serialisasi → Kelas serial tanpa mengaktifkan 'serialVersionUID'`, kelas yang Anda berikan memberi saya peringatan.
Jika saya mencoba kelas pertama, saya melihat:
BTW: Itu tidak menunjukkan saya peringatan sampai saya menambahkan
{ }
ke akhir setiap kelas untuk memperbaiki kesalahan kompilasisumber
File
|Invalidate Caches
, jika tidak membantu, hubungi [email protected] dengan proyek sampel untuk direproduksi.idea.log
(Help | Reveal Log in ...) untuk pengecualian, direktori home terenkripsi di Linux diketahui menyebabkan masalah karena bug kernel .Instal GenerateSerialVersionUID plugin oleh Olivier Descout.
Buka: menu File → Pengaturan → Plugins → Jelajahi repositori →
GenerateSerialVersionUID
Instal plugin dan mulai kembali.
Sekarang Anda dapat membuat id dari menu Code → Generate → serialVersionUID` atau pintasan.
sumber
Tanpa plugin: Anda hanya perlu mengaktifkan highlight di IntelliJ:
IntelliJ Preferences -> Editor -> Inspections -> Java -> Serialization issues -> Serializable class without 'serialVersionUID'
- atur bendera dan klik'OK'
.Sekarang, jika kelas Anda mengimplementasikan
Serializable
, Anda akan melihat highlight, danalt+Enter
nama kelas akan mengusulkan untuk menghasilkanprivate static final long serialVersionUID
.PS: Diambil dari sini
sumber
Setelah menghabiskan beberapa waktu pada Serialisasi, saya menemukan bahwa, kita tidak boleh menghasilkan
serialVersionUID
dengan beberapa nilai acak, kita harus memberikannya nilai yang berarti.Berikut adalah komentar detail tentang ini. Saya mengatasi komentar di sini.
Semoga ini membantu. Semoga berhasil.
sumber
serialVersionUID
dengan nomor acak baru ketika saya tidak ingin mendukung versi lama deserialization. Mungkin saya tidak perlu menggunakan angka acak tetapi bisa mulai dengan 1 dan menambahkannya. Namun,3L
tidak berarti lagi bagi saya-3518231192373568183L
. Oleh karena itu, saya kira kedua solusi bekerja dengan cara yang sama. Namun, angka acak mungkin memiliki keuntungan yang diperoleh dari sejarah non-linear dengan garpu dan cabang.Untuk menghasilkan penggunaan nilai
dan berikan variabel templat randomLong dengan nilai berikut: groovyScript ("Random baru (). nextLong (). abs ()")
https://pharsfalvi.wordpress.com/2015/03/18/adding-serialversionuid-in-idea/
sumber
Selain itu Anda dapat menambahkan template langsung yang akan melakukan pekerjaan.
Untuk melakukannya tekan Ctrl+Alt+S->
"Live Templates"
bagian ->other
(atau jika Anda mau)Dan kemudian buat yang baru dengan definisi seperti ini:
Kemudian pilih
definition
cakupan dan simpan sebagai'serial'
Sekarang Anda bisa mengetikkan
serial
TABbadan kelas.sumber
Cara lain untuk menghasilkan serialVersionUID adalah menggunakan
>Analyze >Run Inspection by Name
dari menu konteks (atau pintasan keyboard, yang ctrl+ alt+ shift+ isecara default) dan kemudian ketik "Kelas serial tanpa 'serialVersionUID'" (atau cukup ketik "serialVersionUID" dan ketik di depan Fungsi akan menemukannya untuk Anda.Anda kemudian akan mendapatkan menu konteks di mana Anda dapat memilih tempat menjalankan inspeksi (mis. Semua dari modul tertentu, seluruh proyek, satu file, ...)
Dengan pendekatan ini Anda bahkan tidak perlu menetapkan aturan inspeksi umum apa pun.
sumber
Dengan versi
v2018.2.1
Pergi ke
Peringatan akan muncul di sebelah deklarasi kelas.
sumber
Saya menggunakan Android Studio 2.1 dan saya memiliki konsistensi yang lebih baik untuk mendapatkan bola lampu dengan mengklik Nama kelas dan mengarahkan kursornya sebentar.
sumber
Tambahkan templat langsung yang disebut "ser" ke grup lain, setel ke "Berlaku di Jawa: deklarasi", dan hapus centang "Persingkat nama FQ". Berikan teks template saja:
Sekarang edit variabel dan atur serial ke:
Ini mengasumsikan tata letak proyek Gradle standar. Ubah / bangun / ke / target / untuk Maven.
sumber
Metode modern termudah:
Alt
+Enter
onIntelliJ akan menggarisbawahi ruang setelah
=
. letakkan kursor Anda di atasnya dan tekanalt
+Enter
(Option
+Enter
di Mac). Anda akan mendapatkan sembulan yang mengatakan "Ubah Inisialisasi serialVersionUID secara acak". Tekan saja enter, dan itu akan mengisi ruang itu dengan panjang acak.sumber
Jika Anda ingin menambahkan serialVersionUID yang tidak ada untuk banyak file, IntelliJ IDEA mungkin tidak berfungsi dengan baik. Saya membuat beberapa naskah sederhana untuk memenuhi tujuan ini dengan mudah:
Anda menyimpan skrip ini, misalnya
add_serialVersionUID.sh
di~/bin
folder Anda . Kemudian Anda menjalankannya di direktori root proyek Maven atau Gradle Anda seperti:.Lst ini menyertakan daftar file Java untuk menambahkan serialVersionUID dalam format berikut:
Script ini menggunakan alat JVK serialVer. Ini sangat ideal untuk situasi ketika Anda ingin mengubah sejumlah besar kelas yang tidak memiliki serialVersionUID di tempat pertama sambil mempertahankan kompatibilitas dengan kelas-kelas lama.
sumber