Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Dominando Optional en Java 8: Guía Práctica para Código Seguro contra Nulos

Optional es un objeto contenedor diseñado para almacenar valores no nulos. Representa la ausencia de un valor en lugar de usar null, proporcionando métodos de utilidad que facilitan el manejo de valores como "disponibles" o "no disponibles", eliminando la necesidad de comprobaciones explícitas de nulidad. Introducido en Java 8, es conceptualmente similar a Optional de Guava.

Declaración de la Clase

La declaración para la clase java.util.Optional<T> es la siguiente:

public final class Optional<T> extends Object

Métodos Principales

Nº Método y Descripción
1

static <T> Optional<T> empty()

Devuelve una instancia vacía de Optional.

2

boolean equals(Object obj)

Indica si otro objeto es "igual a" este Optional.

3

Optional<T> filter(Predicate<? super T> predicate)

Si hay un valor presente y coincide con el predicado dado, devuelve un Optional que lo describe; en caso contrario, devuelve un Optional vacío.

4

<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)

Si hay un valor presente, aplica la función de mapeo que devuelve Optional y devuelve ese resultado; en caso contrario, devuelve un Optional vacío.

5

T get()

Si hay un valor presente, lo devuelve; en caso contrario, lanza NoSuchElementException.

6

int hashCode()

Devuelve el código hash del valor presente, o 0 si no hay valor.

7

void ifPresent(Consumer<? super T> consumer)

Si hay un valor presente, invoca el consumidor especificado con el valor; en caso contrario, no hace nada.

8

boolean isPresent()

Devuelve true si hay un valor presente, false en caso contrario.

9

<U> Optional<U> map(Function<? super T, ? extends U> mapper)

Si hay un valor presente, aplica la función de mapeo y, si el resultado no es nulo, devuelve un Optional que describe el resultado.

10

static <T> Optional<T> of(T value)

Devuelve un Optional con el valor no nulo especificado. Lanza NullPointerException si el valor es nulo.

11

static <T> Optional<T> ofNullable(T value)

Devuelve un Optional que describe el valor especificado si no es nulo; en caso contrario, devuelve un Optional vacío.

12

T orElse(T other)

Devuelve el valor si está presente; en caso contrario, devuelve other.

13

T orElseGet(Supplier<? extends T> other)

Devuelve el valor si está presente; en caso contrario, invoca other y devuelve el resultado de esa invocación.

14

<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)

Devuelve el valor contenido si está presente; en caso contrario, lanza una excepción creada por el proveedor especificado.

15

String toString()

Devuelve una representación en cadena no vacía de este Optional, adecuada para depuración.

Esta clase hereda métodos de:

Ejemplo Práctico

Crea el siguiente programa Java en, por ejemplo, C:\JAVA.

Java8Tester.java

Demo en vivo
import java.util.Optional;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester java8Tester = new Java8Tester();
        Integer value1 = null;
        Integer value2 = new Integer(10);

        // Optional.ofNullable permite que el parámetro sea null
        Optional<Integer> a = Optional.ofNullable(value1);
        // Optional.of lanza NullPointerException si el parámetro es null
        Optional<Integer> b = Optional.of(value2);

        System.out.println(java8Tester.sum(a, b));
    }

    public Integer sum(Optional<Integer> a, Optional<Integer> b) {
        // isPresent verifica si el valor está presente
        System.out.println("El primer parámetro está presente: " + a.isPresent());
        System.out.println("El segundo parámetro está presente: " + b.isPresent());

        // orElse devuelve el valor si está presente, sino el valor por defecto
        Integer value1 = a.orElse(new Integer(0));
        // get obtiene el valor (debe estar presente)
        Integer value2 = b.get();

        return value1 + value2;
    }
}

Verificar el Resultado

Compila la clase usando el compilador javac:

C:\JAVA>javac Java8Tester.java

Ejecuta el programa:

C:\JAVA>java Java8Tester

Debería producir la siguiente salida:

El primer parámetro está presente: false
El segundo parámetro está presente: true
10

Java

  1. Palabra clave final en Java: Variables, métodos y clases
  2. Operador instanceof en Java: Guía completa
  3. Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos
  4. Entendiendo las clases anidadas estáticas en Java: Uso, diferencias y ejemplos
  5. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  6. Patrón Singleton en Java explicado: Cómo implementarlo y usarlo de forma segura
  7. Dominando la Reflexión en Java: Inspeccionando clases, métodos y campos en tiempo de ejecución
  8. Dominando ObjectOutputStream de Java: Serialización, Métodos y Ejemplos Prácticos
  9. Dominando Java Generics: Construyendo Código Reutilizable y Type-Safe
  10. Dominando las operaciones de archivos en Java con java.io: creación, lectura, escritura y eliminación
  11. Mejoras en Java 9: Nuevas Características para la Clase Optional