Maldita Serializacion

Posteado por dbejar el 24 de Diciembre de 2007

Lo de la serializacion es eso que usamos en Java para persistir un objeto. Basicamente hacemos que nuestra clase implemente: java.io.Serializable
Pero supongamos que en algun caso queremos que nuestra clase padre sea serializable, se pueda persistir, pero que la persistencia no sea heredada por alguna clase hija? O simplemente que queremos extender una clase existente en alguna libreria, que es serializable, pero no queremos que nuestra nueva clase lo sea.
Como detener la serializacion heredada?

Hay un truco bastante extraño para hacerlo asi:

Tenemos que declarar los metodos:

private void writeObject(ObjectOutputStream out) throws IOException;
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;

Estos metodos, al ser privados no pueden ser llamados desde fuera, ni ser heredados, ni ser sobreescritos, ni basicamente nada, pero son accesibles para la maquina virtual.
En una clase que implemente Serializable estos metodos, de existir, son llamados por la JVM a la hora de persistir y recuperar el objeto.

Por tanto para detener la serializacion simplemente tenemos que implementar en aquellas clases donde no queremos serializacion esos dos metodos, y lanzar un NotSerializableException.


private void writeObject(ObjectOutputStream out) throws IOException
{
throw new NotSerializableException("Cerrado por vacaciones!");
}
private void readObject(ObjectInputStream in) throws IOException
{
throw new NotSerializableException("Cerrado por vacaciones!");
}

Sencillo pero extraño. Y util, en algunos escenarios.

Hala pues,

Comparte esta entrada:
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Meneame
  • RSS
  • Twitter


Escriba un comentario

Tomate un momento para comentar y contar lo que piensas sobre el post. Puedes usar un HTML básico para formatear

Comentarios leidos

[...] Maldita Serializacion [...]