una retorno que objetos metodos ejemplos ejemplo comprobar clases clase java

retorno - Java Opcional si el objeto no es nulo: devuelve el resultado del método, si es nulo: devuelve el valor predeterminado



objetos null en java (5)

¿Es posible transformar este código en java 8 Expresión de una línea opcional?

long lastPollTime; if (object != null) { lastPollTime = object.getTime(); } else { lastPollTime = 0; }

es decir, si algún objeto no es nulo, necesito llamar al método de objeto y devolver su resultado, o bien devolver el 0. Optional.ofNullable (). orElse () no es adecuado, ya que devuelve el objeto del mismo tipo, pero necesito El resultado de la llamada al método o algún valor por defecto.


Algunas formas:

long lastPollTime = Optional.ofNullable(object).map(o -> o.getTime()).orElse(0L); long lastPollTime = Optional.ofNullable(object).map(YouObjectClass::getTime).orElse(0L); long lastPollTime = Optional.ofNullable(object).isPresent() ? object.getTime() : 0; long lastPollTime = object != null ? object.getTime() : 0;

De estos, el último, que no usa Opcional (¡y por lo tanto no responde estrictamente a su pregunta!) Es más fácil de leer y tiene menos gastos generales de tiempo de ejecución, por lo que debería preferirse.

Podría decirse que es incluso más sencillo si invierte las opciones:

long lastPollTime = object == null ? 0 : object.getTime();

... aunque es posible que prefieras tener el último valor predeterminado, es una cuestión de gusto personal.

Si realmente no puede usar operadores ternarios, y está haciendo esto mucho, podría escribir su propio método de utilidad:

public <T,U> U mapWithFallback(T obj, Function<T,U> function, U fallback) { if(obj == null) { return fallback; } else { return function.apply(obj); } }

... llamada como:

long lastPollTime = mapWithFallback(object, o -> o.getTime(), 0);

... o haga una burla completa de su cheque de no-ternarios usando:

public <T,U> U ifElse( Supplier<Boolean> a, Supplier<U> ifTrue, Supplier<U> ifFalse) { if(a.get()) { return ifTrue.get(); } else { return ifFalse.get(); } } long lastPollTime = ifElse( () -> object == null, () -> object.getTime(), () -> 0);

Es incluso mejor para evitar las referencias nulas por completo, por lo que no es necesario este tipo de comprobación, por ejemplo, utilizando el patrón de Objeto nulo .


puedes hacer como abajo con java 8

long lastPollTime=Optional.ofNullable(object).isPresent()?object.getTime():0;

o sin usar java8 como este

long lastPollTime = object != null ?object.getTime():0;


long lastPollTime = Optional.ofNullable(object).map(o -> o.getTime()).orElse(0L);

En lugar de o -> o.getTime() podría usar una referencia de métodos como ClassOfObject::getTime


long lastPollTime = Optional.ofNullable(object).map(YouObjectClass::getTime).orElse(0L);


long lastPollTime = object != null ?object.getTime():0;