Skip to content

Latest commit

 

History

History

03-Opcional

// concepto

Optional<T> es un contenedor que puede o no contener un valor no nulo. Su propósito es modelar explícitamente la ausencia de valor sin recurrir a null, eliminando NullPointerException y documentando la intención en la firma del método.

Introducido en Java 8, Optional es especialmente útil como tipo de retorno de métodos que pueden no encontrar un resultado (repositorios, búsquedas...).

Regla de oro: usa Optional como tipo de retorno. Nunca como parámetro de método, campo de clase o en colecciones.

// key features

Creación:

Optional<String> lleno    = Optional.of("valor");       // lanza NPE si null
Optional<String> nullable = Optional.ofNullable(valor); // acepta null → Optional.empty()
Optional<String> vacío    = Optional.empty();

Extracción segura:

Método Comportamiento
orElse(T) Devuelve el valor o el default (siempre evalúa el default)
orElseGet(Supplier) Devuelve el valor o invoca el Supplier (lazy)
orElseThrow(Supplier) Devuelve el valor o lanza excepción
ifPresent(Consumer) Ejecuta si hay valor
isPresent() Comprueba si hay valor

Transformación:

optional.map(String::toUpperCase)        // transforma si presente
        .filter(s -> s.length() > 3)     // filtra si presente
        .flatMap(s -> buscarOtro(s))     // cuando map devuelve Optional
// ventajas
  • Elimina NullPointerException de forma explícita.
  • Documenta en la firma que un método puede no devolver valor.
  • Composición fluida con map, filter, flatMap.
  • Fuerza al llamador a manejar el caso ausente.

Ver ExpOptional.java, ExpOptionalChaining.java, ExpOptionalVsException.java y ExpOptionalAntipatterns.java para ejemplos ejecutables con of, ofNullable, map, flatMap, filter, orElse, orElseGet y orElseThrow.