¿Cómo generar este valor en IntelliJ IDEA?
Voy a Configuración -> Errores -> Problemas de serialización -> Clase serializable sin 'serialVersionUID', pero aún no me muestra la advertencia. Mi clase PKladrBuilding padre implementa la interfaz Serializable .
Parte del código:
public class PKladrBuilding extends PRQObject
public abstract class PRQObject extends PObject
public abstract class PObject implements Serializable
java
serialization
intellij-idea
Kirill Bazarov
fuente
fuente
1L
como su ID e incremente cuando cambie su forma serializada. (Ver stackoverflow.com/questions/888335/… ).Respuestas:
No estoy seguro si tiene una versión anterior de IntelliJ IDEA, pero si voy al menú Archivo → Configuración ... → Inspecciones → Problemas de serialización → Clase serializable sin 'serialVersionUID' habilitado, la clase que proporciona me da advertencias.
Si pruebo la primera clase, veo:
Por cierto: no me mostró una advertencia hasta que agregué
{ }
al final de cada clase para corregir el error de compilación.fuente
File
|Invalidate Caches
, si no ayuda, póngase en contacto con [email protected] con un proyecto de muestra para reproducir.idea.log
(Ayuda | Revelar Iniciar sesión ...) para ver las excepciones, se sabe que el directorio de inicio cifrado en Linux causa problemas debido al error del kernel .Instale el complemento GenerateSerialVersionUID de Olivier Descout.
Vaya a: menú Archivo → Configuración → Complementos → Buscar repositorios →
GenerateSerialVersionUID
Instale el complemento y reinicie.
Ahora puede generar la identificación desde el menú Código → Generar → serialVersionUID` o el acceso directo.
fuente
Sin complementos: solo necesita habilitar el resaltado en IntelliJ:
IntelliJ Preferences -> Editor -> Inspections -> Java -> Serialization issues -> Serializable class without 'serialVersionUID'
- Establecer bandera y hacer clic'OK'
.Ahora, si su clase se implementa
Serializable
, verá resaltado, yalt+Enter
el nombre de la clase propondrá generarprivate static final long serialVersionUID
.PD: tomado de aquí
fuente
Después de pasar un tiempo en serialización, encuentro que no deberíamos generar
serialVersionUID
con algún valor aleatorio, deberíamos darle un valor significativo.Aquí hay un comentario detallado sobre esto. Estoy haciendo frente al comentario aquí.
Espero que esto ayude. Buena suerte.
fuente
serialVersionUID
con un nuevo número aleatorio cuando no quiero admitir versiones antiguas en la deserialización. Quizás no necesito usar números aleatorios, pero puedo comenzar con 1 e incrementarlo. Sin embargo,3L
no tiene más significado para mí entonces-3518231192373568183L
. Por lo tanto, supongo que ambas soluciones funcionan de manera similar. Sin embargo, el número aleatorio podría tener la ventaja de que funciona en historias no lineales con horquillas y ramas.Para generar el valor use
y proporcione la variable de plantilla randomLong con el siguiente valor: groovyScript ("new Random (). nextLong (). abs ()")
https://pharsfalvi.wordpress.com/2015/03/18/adding-serialversionuid-in-idea/
fuente
Además, puede agregar una plantilla en vivo que hará el trabajo.
Para hacerlo, presione Ctrl+Alt+S->
"Live Templates"
sección ->other
(o w / e que desee)Y luego cree uno nuevo con una definición como esta:
Luego seleccione el
definition
alcance y guárdelo como'serial'
Ahora puede escribir
serial
TABen el cuerpo de la clase.fuente
Otra forma de generar el serialVersionUID es usarlo
>Analyze >Run Inspection by Name
desde el menú contextual (o el atajo de teclado, que es ctrl+ alt+ shift+ ipor defecto) y luego escribir "Clase serializable sin 'serialVersionUID'" (o simplemente escribir "serialVersionUID" y el tipo que está más adelante) La función lo encontrará por usted.Luego obtendrá un menú contextual en el que puede elegir dónde ejecutar las inspecciones (por ejemplo, todo desde un módulo específico, proyecto completo, un archivo, ...)
Con este enfoque, ni siquiera tiene que establecer las reglas generales de inspección en nada.
fuente
Con la versión
v2018.2.1
Ir
Debería aparecer una advertencia al lado de la declaración de clase.
fuente
Estoy usando Android Studio 2.1 y tengo una mejor consistencia para obtener la bombilla haciendo clic en el Nombre de la clase y pasando el mouse por un segundo.
fuente
Agregue una plantilla en vivo llamada "ser" al otro grupo, configúrela como "Aplicable en Java: declaración" y desmarque "Acortar nombres FQ". Dele un texto de plantilla de solo:
Ahora edite las variables y configure serial a:
Asume el diseño estándar del proyecto Gradle. Cambiar / construir / a / objetivo / para Maven.
fuente
Método moderno más fácil:
Alt
+Enter
enIntelliJ subrayará el espacio después de
=
. coloca el cursor sobre él y presionaalt
+Enter
(Option
+Enter
en Mac). Obtendrá una ventana emergente que dice "Cambiar aleatoriamente el inicializador serialVersionUID". Simplemente presione enter, y se llenará ese espacio con un largo aleatorio.fuente
Si desea agregar el serialVersionUID ausente para un grupo de archivos, IntelliJ IDEA puede no funcionar muy bien. Presento un script simple para cumplir este objetivo con facilidad:
Guarda este script, digamos como
add_serialVersionUID.sh
en su~/bin
carpeta. Luego lo ejecuta en el directorio raíz de su proyecto Maven o Gradle como:Este .lst incluye la lista de archivos Java para agregar el serialVersionUID en el siguiente formato:
Este script usa la herramienta JDK serialVer. Es ideal para una situación en la que desea modificar una gran cantidad de clases que no tenían un serialVersionUID establecido en primer lugar, manteniendo la compatibilidad con las clases antiguas.
fuente