La palabra clave transient
en Java tiene un propósito muy específico: Manejar la serialización. La serialización es el proceso de convertir el estado del objeto en bytes para almacenarlo en un medio persistente (como se puede guardar en el disco) o enviarse a través de la red. Incluso puede guardar datos de objetos en una base de datos. Pero no todos los elementos de un objeto son útiles o necesarios para este proceso. Aquí es donde entra la keyword transient
.
Cuando se aplica la palabra clave transient
a un campo en Java, este campo no se serializa. Es decir, su estado no se guarda como parte del objeto durante la serialización. Esto puede resultar útil en casos en los que un campo particular puede contener datos que no pertenecen al estado persistente del objeto, como los datos temporales o el contenido de configuración que se puede recalcular fácilmente.
Por ejemplo, si tenemos una clase llamada Usuario
, que contiene información sobre un usuario individual, pero también tiene un campo contraseña
que por razones de seguridad, no queremos guardar ni transmitir ese dato. En este caso, podemos marcar el campo contraseña
como transient
, así:
class Usuario implements Serializable {
String nombre;
String apellido;
transient String contraseña;
// constructor, getters y settrs
}
Cuando un objeto Usuario
se serializa, los valores en nombre
y apellido
se guardarán, pero contraseña
se pasará por alto.
Si bien uno puede ser tentado a usar transient
con frecuencia para mantener los objetos serializables lo más pequeños posible, es importante recordar que todo tiene su costo. En este caso, el costo se tiene al deserializar el objeto ya que tendríamos que establecer cualquier campo transient
que necesite un valor no predeterminado. Es aquí que se debe hacer una evaluación para decir si vale la pena marcar el campo como transient
o no.
Usar transient
en Java puede ser un poco confuso al principio, pero con la práctica se hace claro cuándo y cómo usar esta palabra clave para serialización. Como todas las herramientas, su uso efectivo depende en última instancia de los detalles del problema que está resolviendo, y un sólido entendimiento de los conceptos y mecanismos subyacentes.