java - tipo - ¿Por qué mi clase de excepción debe ser serializada?
excepciones predefinidas en java (3)
Esto se debe a que la clase raíz para todas las excepciones, Throwable
implementa la interfaz Serializable
. Todas las excepciones por defecto son serializables y esa es una decisión de diseño del lenguaje porque los autores querían que las excepciones se pudieran enviar a través del cable sin ninguna configuración especial.
Si la clase base no es serializable, le resultaría difícil transmitir qué fue exactamente lo que falló en caso de que falle un método remoto, ya que no tendría control sobre los tipos de excepción incorporados.
Cuando extiende una clase con excepción de clase (para crear una nueva excepción) recibe una advertencia para tener un serialVersionUID
. Sé que serialVersionUID
desempeña un papel importante durante la serialización y la deserialización, pero ¿cuándo es necesario serializar mi excepción? ¿Puede alguien darme un caso práctico en el que quiero que mi clase de excepción personalizada tenga serialización y deserialización?
Si su excepción personalizada se usa alguna vez en una aplicación distribuida (utilizando RMI, Spring http-invocador, lo que sea) y puede lanzarse desde un método de servidor que se invoca desde un cliente remoto, entonces la excepción tendrá que ser serializada para cruzar el cable y ve al cliente.
Sus únicas opciones son definir serialVersionUID
para cada tipo de Exception
que defina (el IDE puede generarlo) o suprimir la advertencia.
¿Puede encontrar mi pregunta anterior explícita serialVersionUID considerada dañina? pertinente.