java - tipos - que es una clase en programacion
¿Es una buena práctica usar Opcional como un atributo en una clase? (2)
Creo que es una pregunta teórica.
La noción de valores opcionales fue traída del mundo de los lenguajes funcionales. Esos idiomas generalmente también admiten la coincidencia de patrones en el nivel de idioma y le permiten establecer coincidencias en el valor opcional.
En los lenguajes funcionales, las llamadas de función generalmente devuelven un valor opcional con el que otro código podría coincidir.
Nunca he visto pasar un argumento opcional, pero eso no significa que sea una mala idea. Aunque se ve raro
Esta pregunta ya tiene una respuesta aquí:
- Usos de las 13 respuestas opcionales
- Guava Opcional como argumento de método para parámetros opcionales 1 respuesta
He leído algo sobre el propósito de la Optional
(lamentablemente no recuerdo dónde) en Java 8, y me sorprendió que el escritor no mencionara el uso de una Optional
como un atributo en una clase.
Ya que estoy usando opciones con bastante frecuencia en mis clases, me preguntaba si esta es una buena práctica. ¿O podría mejor usar atributos normales, que devuelven null
cuando no están configurados?
Nota: Puede parecer que mi pregunta está basada en opiniones, pero tengo la sensación de que el uso de Optional
en una clase no es el camino a seguir (después de leer la publicación mencionada). Sin embargo, me gusta usarlo y no puedo encontrar ningún inconveniente de usarlo.
Ejemplo
Me gustaría dar un ejemplo para aclarar. Tengo una clase Transaction
, que se construye así:
public class Transaction {
private Optional<Customer> = Optional.empty();
....
vs
public class Transaction {
private Customer = null;
....
Al consultar a un Customer
, creo que es más lógico usar transaction.getCustomer().isPresent()
que transaction.getCustomer() != null
. En mi opinión, el primer código es más limpio que el segundo.
El Optional
Java 8 estaba destinado principalmente a valores de retorno de métodos y no a propiedades de clases de Java, como se describe en Opcional en Java SE 8 :
Por supuesto, la gente hará lo que quiera. Pero teníamos una intención clara al agregar esta función, y no era un tipo de propósito general o de
Some
, ya que a muchas personas les hubiera gustado que lo hiciéramos. Nuestra intención era proporcionar un mecanismo limitado para los tipos de devolución de métodos de biblioteca donde era necesario que hubiera una forma clara de representar "ningún resultado", y el uso de unnull
para los mismos era muy probable que causara errores.La clave aquí es el enfoque en el uso como tipo de retorno. La clase definitivamente no está destinada a ser utilizada como una propiedad de un Java Bean. Testigo de esto es que
Optional
no implementaSerializable
, que generalmente es necesario para un uso generalizado como propiedad de un objeto.