Sustitución de cheque nulo con java 8 opcional

springenthusiast:

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.

ETO:

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 Optionales 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 Optionalen su caso estaría volviendo opcional ResultObjdel fetchDetailsmétodo:

Optional<ResultObj> fetchDetails() {
   ...
}

Entonces sólo tiene que encadenar los métodos de descabellada Optionalcomo lo hacía antes.

Actualizar

En caso de que no se puede modificar fetchDetailstodaví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 */);

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=173052&siteId=1
Recomendado
Clasificación