Estoy tratando de reemplazar a continuación con el bloque de código opcional, simplemente quiere comprobar habrá ninguna mala implicaciones de esta manera un rendimiento similar o algo como tal?
código existente:
UserObj userObj=new UserObj();
Object result = fetchDetails();
if (null != result) {
userObj.setResult(result.toString());
}
Con Java 8 Optional
:
UserObj userObj=new UserObj();
Optional.ofNullable(fetchDetails()).ifPresent(var -> userObj.setResult(var.toString()));
Hacer este cambio sólo para hacer mirada código concisa, ya que hay gran cantidad de bloques de comprobación nula en mi código.
En primer lugar creo que estás malentendido con el propósito de Optional
. No es sólo para la sustitución
if(obj != null){ ... }
El punto principal de Optional
es proporcionar un medio para una función que devuelve un valor para indicar la ausencia de un valor de retorno. Por favor, lea este post para más detalles.
El uso adecuado de Optional
en su caso estaría volviendo opcional ResultObj
del fetchDetails
método:
Optional<ResultObj> fetchDetails() {
...
}
Entonces sólo tiene que encadenar los métodos de descabellada Optional
como lo hacía antes.
Actualizar
En caso de que no se puede modificar fetchDetails
todavía hay una opción de envolverlo en su propio método como el siguiente:
Optional<ResultObj> fetchOptionalDetails() {
return Optional.ofNullable(fetchDefails());
}
La creación de un nuevo método añadirá una pequeña sobrecarga, pero el código será mucho más fácil de leer:
fetchOptionalDetails().ifPresent(details -> /* do something */);