Come generare l'UID della versione seriale in Intellij


126

Quando ho usato Eclipse , aveva una bella funzionalità per generare l'UID della versione seriale.

Ma cosa fare in IntelliJ?

Come scegliere o generare un UID di versione seriale identico in IntelliJ?

E cosa fare quando modifichi la vecchia classe?

Se non hai specificato id, viene generato in fase di esecuzione ...



@JFIB La costante di classe serialVersionUIDviene generata dal compilatore quando non specificata. La specifica ha il vantaggio (e il pericolo) di mantenere identico l'id per le versioni di classe modificate. Ovvero un file con un oggetto della vecchia versione verrà letto (deserializzato) con la nuova versione o viceversa.
Joop Eggen

Risposte:


304

Senza plugin:

Devi solo abilitare l'evidenziazione: (Idea v.2016, 2017 e 2018, le versioni precedenti potrebbero avere impostazioni uguali o simili)

File -> Impostazioni -> Editor -> Ispezioni -> Java -> Problemi di serializzazione -> Classe serializzabile senza 'serialVersionUID' - imposta il flag e fai clic su 'OK'. (Per Mac, Impostazioni è sotto IntelliJ IDEA -> Preferenze ...)

Ora, se la tua classe implementa Serializable, vedrai l'evidenziazione e alt + Invio sul nome della classe proporrà di generare private static final long serialVersionUID.

UPD: un modo più veloce per trovare questa impostazione - potresti usare il tasto di scelta rapida Ctrl+Shift+A(trova azione), digita Serializable class without 'serialVersionUID'- il primo è quello.


2
@SalilJunior Non proprio. La capacità incorporata di generare un serialVersionUID è legata agli avvisi di ispezione. Sei bloccato quando non vuoi abilitare l'avviso di ispezione ma in alcuni casi generare serialVersionUID.
Fabian Barney

Questa soluzione non funziona per me, posso solo vedere le opzioni: rimuovere l'implementazione parcelable, sostituire l'implementazione parcelable, creare test, creare sottoclasse e rendere il pacchetto privato. La classe che sto utilizzando implementa Parcelable e Serializable allo stesso tempo. Qualche idea?
gonver

Hai verificato che il flag necessario è impostato nelle impostazioni sopra? Testato sia nell'idea v16 che v17, funziona bene. Controllare anche le impostazioni aggiuntive per tale ispezione dopo aver fatto clic su di esso nella finestra delle impostazioni (a destra).
Serhii Maksymchuk

Non lo sapevo e lo trovo molto utile.
Chaklader Asfak Arefe

62

Metodo più semplice: Alt+ Entersu

private static final long serialVersionUID = ;

IntelliJ sottolineerà lo spazio dopo il =. posiziona il cursore su di esso e premi alt+ Enter( Option+ Entersu Mac). Otterrai un popover che dice "Randomly Change serialVersionUID Initializer". Basta premere Invio e popolerà quello spazio con un lungo casuale.


Grazie ha lavorato per me in IntelliJ IDEA Community Edition versione 2018.3.3
Tarun

Si consiglia inoltre nei documenti java di utilizzare il modificatore privato ove possibile. docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/…
Ilya Lozinsky

2
Risposta migliore a quella sopra.
Akin Okegbile

32

Installa il plug-in GenerateSerialVersionUID


2
Perché installare un plugin quando questo può essere fatto facilmente come mostrato da @Serhii di seguito.
shaz

2
@shaz Preferisco quando l'ispezione è disabilitata, ma per alcune classi è richiesto il serialVersionUID esplicito. Non voglio un'ispezione che distragga su ogni classe mentre ho bisogno di serialVersionUID solo per uno.
Timofey

1
Penso che il plugin aiuti a generare valori per sottoclassi in cui anche la classe genitore è serializzabile e contiene un file serialVersionUID. Questo si prende cura del caso in cui hai aggiornato la classe figlia e devi generare un nuovo serialVersionUID per questa classe senza modificare il serialVersionUID della classe genitore (nei casi in cui non è stata apportata alcuna modifica alla classe genitore).
kapad

Sebbene questo possa rispondere alla domanda, è meglio fornire le informazioni effettive qui e non solo un collegamento. Le risposte di solo collegamento non sono considerate buone risposte e probabilmente verranno eliminate .
elixenide

3
@EdCottrell Non ci sono altre informazioni da fornire. Usa il plugin o no.
Meo

2

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

molto bello, molto facile da installare. puoi installarlo dal menu dei plugin, selezionare installa da disco, selezionare il file jar che hai decompresso nella cartella lib. riavvia, control + ins e si apre per generare l'UID seriale dal menu. lo adoro. :-)


0

con nell'editor di codice, aprire la classe per la quale si desidera creare l'UID, fare clic con il pulsante destro del mouse -> Genera -> SerialVersionUID. Potrebbe essere necessario installare il plug-in GenerateSerialVersionUID affinché funzioni.


1
come pensi che la tua risposta aggiunga qualcosa di nuovo per risolvere questo problema? Se la risposta non è, elimina la tua risposta, perché è inutile.
nazar_art

dopo aver aggiunto il plugin, alcuni potrebbero confondersi su come generare effettivamente l'UID. Questo è ciò che viene aggiunto.
mykey

1
Immagino che possano leggere la pagina man di quel plugin. La tua risposta è ovvia.
nazar_art
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.