IntelliJ IDEA generando serialVersionUID

7 minutos de lectura

avatar de usuario
Kirill Bazarov

¿Cómo se genera este valor en IntelliJ IDEA?

voy a Ajustes -> errores -> Problemas de serialización -> Clase serializable sin ‘serialVersionUID’, pero aún no me muestra la advertencia. Los implementos principales de mi clase PKladrBuilding interfaz Serializable.

Parte del código:

public class PKladrBuilding extends PRQObject

public abstract class PRQObject extends PObject

public abstract class PObject implements Serializable

  • ¿Estás seguro de que necesitas generar un valor, en lugar de definir el tuyo propio? Si está creando una nueva clase, le recomendaría que defina, por ejemplo 1L como su ID y se incrementa cuando cambia su forma serializada. (Consulte stackoverflow.com/questions/888335/…).

    –Duncan Jones

    16/10/2012 a las 10:15

  • stackoverflow.com/questions/24573643/… tiene una muy buena solución.

    – Pankaj Kumar

    27 de diciembre de 2016 a las 7:06

avatar de usuario
pedro laurey

No estoy seguro si tiene una versión antigua de IntelliJ IDEA, pero si voy al menú ExpedienteAjustes…InspeccionesProblemas de serialización → Clase serializable sin ‘serialVersionUID’` habilitado, la clase que proporciona me da advertencias.

Ingrese la descripción de la imagen aquí

Si pruebo la primera clase veo:

Ingrese la descripción de la imagen aquí

Por cierto: no me mostró una advertencia hasta que agregué { } al final de cada clase para corregir el error de compilación.

  • Probar File | Invalidate Cachessi no ayuda, comuníquese con [email protected] con un proyecto de muestra para reproducir.

    – CrazyCoder

    16 de octubre de 2012 a las 10:19

  • Controlar idea.log (Ayuda | Revelar inicio de sesión …) para excepciones, se sabe que el directorio de inicio cifrado en Linux causa problemas debido a la error del núcleo.

    – CrazyCoder

    16/10/2012 a las 10:53

  • tengo muchas excepciones ahí… como java.lang.NoClassDefFoundError: org/intellij/lang/annotations/MagicConstant;

    – Kirill Bazarov

    16 de octubre de 2012 a las 10:58

  • Reinstalé IDEA y eliminé los complementos y me ayudó. Muchas gracias.

    – Kirill Bazarov

    16/10/2012 a las 12:10

  • La forma en que lo hice funcionar en la v15 es pasar el cursor sobre ClassName para ver la advertencia y mover el mouse lentamente hacia el canalón. En ese momento aparece la “bombilla” en la pantalla. (Pruebe esto varias veces si no funciona como se esperaba la primera vez). Luego puede hacer clic en la opción de crear campo para crear el uid. Espero que esto ayude a las personas que están atascadas en esto.

    – Niyaz

    14/01/2016 a las 22:11


avatar de usuario
sileria

Instala el Generar SerialVersionUID Complemento de Olivier Descout.

ir a: menú ExpedienteAjustesComplementosExplorar repositoriosGenerateSerialVersionUID

Instale el complemento y reinicie.

Ahora puedes generar la identificación desde el menú. CódigoGenerar → serialVersionUID` o el acceso directo.

  • ¿Debería uno requerir un complemento externo realmente para que esto funcione?

    – H.Rabiee

    30 mayo 2014 a las 21:34

  • Sí, necesita un complemento que ya sea parte del repositorio de complementos de IntelliJ.

    – Sileria

    13 de junio de 2014 a las 17:09

  • Tiempo de espera para mí en Android Studio

    -Laurent Russier

    24 de septiembre de 2015 a las 8:15

  • Funciona en 2017.3.4: noté que no podía generar un serialVersionUID cuando estaba definido en una clase base (aunque es estático privado y no debería importar en ese sentido). Este plugin acaba de ofrecer la opción y funciona. Agradable.

    – Stefan Hendriks

    6 de febrero de 2018 a las 14:57

  • La respuesta es correcta, pero un complemento que rompe cada pocas versiones principales no es tan bueno como usar la solución interna que también se publica aquí.

    – Hannes Schneidermayer

    17/09/2018 a las 13:37

avatar de usuario
Nikhil Katre

Sin ningún complemento: 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 implementa Serializableverá resaltado, y alt+Enter en el nombre de la clase propondrá generar private static final long serialVersionUID.

PD: Tomado de aquí

  • Gracias. No sé por qué no veo la bombilla, pero hacer clic en el nombre de la clase y escribir Alt-Enter funciona.

    – Juan S.

    10 sep 2018 a las 16:51

  • La respuesta es robada de aquí.

    – Serhii Maksymchuk

    21 de febrero de 2019 a las 10:11

  • esto es mas actual

    – Cristiano Mateo

    11 de junio de 2019 a las 18:44

Después de dedicar un tiempo a la serialización, descubrí que no deberíamos generar serialVersionUID con algún valor aleatorio, deberíamos darle un valor significativo.

Aquí hay un comentario de detalles sobre esto. Estoy haciendo frente al comentario aquí.

En realidad, no debería estar “generando” UID de versión en serie. Es una “característica” tonta que se deriva del malentendido general de cómo Java usa esa ID. Debería dar a estos ID valores significativos y legibles, por ejemplo, comenzando con 1L e incrementándolos cada vez que crea que la nueva versión de la clase debería volver obsoletas todas las versiones anteriores (que podrían estar serializadas previamente). Todas las utilidades que generan dichos ID básicamente hacen lo que hace la JVM cuando el ID no está definido: generan el valor en función del contenido del archivo de clase, por lo que generan enteros largos ilegibles y sin sentido. Si desea que todas y cada una de las versiones de su clase sean distintas (a los ojos de la JVM), entonces ni siquiera debe especificar el valor serialVersionUID ya que la JVM producirá una sobre la marcha, y el valor de cada versión de su clase será ser único. El propósito de definir ese valor explícitamente es decirle al mecanismo de serialización que trate las diferentes versiones de la clase que tienen el mismo SVUID como si fueran iguales, por ejemplo, que no rechace las versiones serializadas más antiguas. Entonces, si define la ID y nunca la cambia (y supongo que eso es lo que hace, ya que depende de la generación automática y probablemente nunca vuelva a generar sus ID), se asegura de que todas las versiones, incluso las absolutamente diferentes, de su clase será considerada igual por el mecanismo de serialización. ¿Es eso lo que quieres? De lo contrario, y si realmente desea tener control sobre cómo se reconocen sus objetos, debe usar valores simples que usted mismo pueda comprender y actualizar fácilmente cuando decida que la clase ha cambiado significativamente. Tener un valor de 23 dígitos no ayuda en absoluto.

Espero que esto ayude. Buena suerte.

Para generar valor utilizar

private static final long serialVersionUID = $randomLong$L;
$END$

y proporcione la variable de plantilla randomLong con el siguiente valor: groovyScript(“new Random().nextLong().abs()”)

https://pharsfalvi.wordpress.com/2015/03/18/agregando-serialversionuid-en-idea/

  • Me encanta este comentario, usar plantillas en vivo es sin duda la solución más rápida y más personalizable (eliminé la nueva línea, por ejemplo). Para configurar, vaya a Android Studio > Preferencias > Editor > Plantillas en vivo y cree una nueva allí (icono más) con este valor y use las variables de edición para ingresar el script

    – hcpl

    16 oct 2017 a las 15:34


avatar de usuario
acdcjunior

Además, puede agregar una plantilla en vivo que hará el trabajo.

Para hacerlo presiona Ctrl+Alt+S -> "Live Templates" sección -> other (o con quien quieras)

Y luego crea uno nuevo con una definición como esta:

private static final long serialVersionUID = 1L;
$END$

Luego seleccione definition alcance y guárdelo como 'serial'

Ahora puedes escribir serialPESTAÑA en cuerpo de clase.

  • Me encanta este comentario, usar plantillas en vivo es sin duda la solución más rápida y más personalizable (eliminé la nueva línea, por ejemplo). Para configurar, vaya a Android Studio > Preferencias > Editor > Plantillas en vivo y cree una nueva allí (icono más) con este valor y use las variables de edición para ingresar el script

    – hcpl

    16 oct 2017 a las 15:34


avatar de usuario
jeremysprofile

El método moderno más fácil: Alt+Enter en

private static final long serialVersionUID = ;

IntelliJ subrayará el espacio después de la =. pon el cursor encima y pulsa alt+Enter (Option+Enter en Mac). Obtendrá una ventana emergente que dice “Cambiar aleatoriamente el inicializador serialVersionUID”. Simplemente presione enter, y llenará ese espacio con un largo aleatorio.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad