39

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 se debe 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?¿Por qué mi clase de excepción debe ser serializada?

Respuesta

50

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, tendría dificultades para transmitir qué fue exactamente lo que falló en caso de que fallara un método remoto ya que no tendría control sobre los tipos de excepción incorporados.

11

Si su excepción personalizada se usa alguna vez en una aplicación distribuida (utilizando RMI, Spring http-invocador, lo que sea) y se puede ejecutar desde un servidor invocado desde un cliente remoto, la excepción tendrá que ser serializada para cruzar el cable e ir al cliente.

4

Sus únicas opciones son definir serialVersionUID para cada tipo Exception que defina (el IDE puede generarlo) o suprimir la advertencia.

Puede encontrar mi pregunta anterior explicit serialVersionUID considered harmful? relevante.

Cuestiones relacionadas