Cómo generar la versión serial UID en Intellij

126

Cuando usé Eclipse , tenía una buena característica para generar UID de versión en serie.

Pero, ¿qué hacer en IntelliJ?

¿Cómo elegir o generar una versión de serie idéntica UID en IntelliJ?

¿Y qué hacer cuando modificas la clase anterior?

Si no ha especificado id, se genera en tiempo de ejecución ...

nazar_art
fuente
1
Duplicado de stackoverflow.com/questions/12912287/…
Bruno Volpato
@JFIB La constante de clase la serialVersionUIDgenera el compilador cuando no se especifica. La especificación tiene la ventaja (y el peligro) de mantener la identificación idéntica para las versiones de clases modificadas. Es decir, un archivo con un objeto de la versión anterior se leerá (deserializará) con la nueva versión o viceversa.
Joop Eggen

Respuestas:

304

Sin complementos:

Solo necesita habilitar el resaltado: (Idea v.2016, 2017 y 2018, las versiones anteriores pueden tener configuraciones iguales o similares)

Archivo -> Configuración -> Editor -> Inspecciones -> Java -> Problemas de serialización -> Clase serializable sin 'serialVersionUID' - configure el indicador y haga clic en 'Aceptar'. (Para Mac, la configuración está en IntelliJ IDEA -> Preferencias ...)

Ahora, si su clase se implementa Serializable, verá resaltado y alt + Enter en el nombre de la clase propondrá generar private static final long serialVersionUID.

UPD: una forma más rápida de encontrar esta configuración; puede usar la tecla de acceso rápido Ctrl+Shift+A(acción de búsqueda), escriba Serializable class without 'serialVersionUID': la primera es la única.

Serhii Maksymchuk
fuente
2
@SalilJunior No realmente. La capacidad incorporada para generar un serialVersionUID está vinculada a las advertencias de inspección. Está atascado cuando no desea habilitar la advertencia de inspección, pero genera serialVersionUID en algunos casos.
Fabian Barney
Esta solución no funciona para mí, solo puedo ver las opciones: eliminar implementación parcelable, reemplazar implementación parcelable, crear prueba, crear subclase y hacer que el paquete sea privado. La clase que estoy usando implementa Parcelable y Serializable al mismo tiempo. ¿Alguna idea?
saldrá el
¿Ha comprobado que la bandera necesaria está configurada en la configuración anterior? Probado en idea v16 y v17, funciona bien. También verifique la configuración adicional para dicha inspección después de hacer clic en ella en la ventana de configuración (a la derecha).
Serhii Maksymchuk
No sabía esto y lo encontré muy útil.
Chaklader Asfak Arefe
62

Método más fácil: Alt+ Enterencendido

private static final long serialVersionUID = ;

IntelliJ subrayará el espacio después de =. coloque el cursor sobre él y presione alt+ Enter( Option+ Enteren Mac). Obtendrá una ventana emergente que dice "Cambiar aleatoriamente el inicializador serialVersionUID". Simplemente presione enter, y completará ese espacio con un largo aleatorio.

jeremysprofile
fuente
Gracias trabajaron para mí en IntelliJ IDEA Community Edition versión 2018.3.3
Tarun
También se recomienda en los documentos de Java utilizar un modificador privado siempre que sea posible. docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/…
Ilya Lozinsky
2
Mejor respuesta a la anterior.
Akin Okegbile
32

Instalar el complemento GenerateSerialVersionUID

Meo
fuente
2
¿Por qué instalar un complemento cuando esto se puede hacer fácilmente como lo muestra @Serhii a continuación?
shaz
2
@shaz Prefiero cuando esa inspección está deshabilitada, pero para algunas clases se requiere obtener serialVersionUID explícito. No quiero una inspección que distraiga en cada clase mientras necesito serialVersionUID solo para una.
Timofey
1
Creo que el complemento ayuda a generar valores para subclases donde la clase principal también es serializable y contiene un archivo serialVersionUID. Esto se ocupa del caso cuando ha actualizado la clase secundaria y necesita generar un nuevo serialVersionUID para esta clase sin cambiar el serialVersionUID de la clase principal (en los casos en los que no se realizó ningún cambio en la clase principal).
kapad
Si bien esto puede responder a la pregunta, es mejor proporcionar la información real aquí y no solo un enlace. Las respuestas de solo enlace no se consideran buenas respuestas y probablemente se eliminarán .
elixenide
3
@EdCottrell No hay más información que proporcionar. Utilice el complemento o no.
Meo
2

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

muy bonito, muy fácil de instalar. puede instalarlo desde el menú de complementos, seleccione instalar desde el disco, seleccione el archivo jar que desempaquetó en la carpeta lib. reiniciar, controlar + ins, y aparece para generar UID serial desde el menú. quiéralo. :-)

Patch Rhythm
fuente
0

con en el editor de código, abra la clase para la que desea crear el UID, haga clic derecho -> Generar -> SerialVersionUID. Es posible que deba tener instalado el complemento GenerateSerialVersionUID para que esto funcione.

mi llave
fuente
1
¿Cómo crees que tu respuesta agrega algo nuevo para resolver este problema? Si la respuesta no es, simplemente elimine su respuesta, porque es inútil.
nazar_art
después de agregar el complemento, algunos pueden confundirse sobre cómo generar realmente el UID. Eso es lo que se agrega.
mykey
1
Supongo que pueden leer la página de manual de ese complemento. Tu respuesta es obvia.
nazar_art