Análisis completo de Java Opcional: ¿Por qué utilizar Opcional? ¿Cómo utilizar Opcional correctamente?

Cuando necesitamos manejar valores nulos en nuestros programas Java, Java Opcional es una clase de herramienta muy útil, que se introdujo en Java 8 y nos proporciona una mejor solución. Este artículo presentará el uso y el código de muestra de Java Opcional.

1. ¿Qué es Java opcional?

Java Opcional es un contenedor que puede contener valores nulos o no nulos. Es una clase que proporciona métodos para manejar de forma segura valores posiblemente nulos.

La clase Java Opcional tiene dos subclases: Opcional y OpcionalDouble. Opcional es una clase genérica que puede contener objetos de cualquier tipo. Y OpcionalDouble es una clase opcional especial para tipo doble. Además, Java también proporciona dos clases, OpcionalInt y OpcionalLong, para manejar valores nulos de tipos int y long.

Antes de Java 8, es posible que a menudo veamos aparecer una NullPointerException en nuestro código. Esto suele deberse a que nuestro código intenta utilizar una referencia de objeto nula. Por ejemplo:

String name = null;
System.out.println(name.length());

En este ejemplo, el nombre de la variable es nulo, por lo que obtenemos una excepción de puntero nulo cuando intentamos llamar al método length().

Para resolver este problema, Java 8 introdujo el tipo Opcional.

Opcional es un contenedor de objetos que contiene valores opcionales que nos impide utilizar valores nulos en nuestra aplicación. Los objetos opcionales pueden contener un valor no nulo o pueden estar vacíos.

2. ¿Cómo utilizar Opcional?

El tipo Opcional tiene varios usos diferentes, algunos de los cuales son:

Crear un objeto opcional

Podemos usar el método estático de() para crear un objeto Opcional que contenga un valor no nulo.

Por ejemplo, para crear un objeto Opcional que contenga la cadena "hola", puedes usar el siguiente código:

Optional<String> optional = Optional.of("hello");

También podemos crear objetos Opcionales usando el método estático de Nullable(). A diferencia de of(), el método ofNullable() creará un objeto Opcional vacío si el valor pasado es nulo.

Optional<String> optional = Optional.ofNullable(null);

Comprueba si un objeto opcional contiene un valor

Podemos verificar si un objeto Opcional contiene un valor usando el método isPresent(). El método isPresent() devolverá verdadero si está presente y falso en caso contrario.

Optional<String> optional = Optional.of("hello");
if (optional.isPresent()) {
    System.out.println("value is present");
} else {
    System.out.println("value is absent");
}

Obtener el valor del objeto Opcional

Podemos obtener valor del objeto opcional usando el método get(). Si el objeto Opcional no contiene un valor, el método get() generará una NoSuchElementException.

Optional<String> optional = Optional.of("hello");
String value = optional.get();
System.out.println(value);

Evite utilizar el método get(), ya que esto puede generar una excepción. En su lugar, podemos usar el método orElse() para proporcionar un valor predeterminado a devolver cuando el objeto Opcional no contiene ningún valor.

Optional<String> optional = Optional.ofNullable(null);
String value = optional.orElse("default");
System.out.println(value);

Encadenamiento de objetos opcionales

El tipo Opcional también proporciona muchos métodos convenientes para encadenar llamadas a objetos Opcionales. Por ejemplo, podemos usar el método map() para convertir valores en objetos Opcionales a otros tipos.

Optional<String> optional = Optional.of("hello");
Optional<Integer> length = optional.map(String::length);
System.out.println(length.get());

También podemos convertir un objeto Opcional en otro objeto Opcional usando el método flatMap().

Optional<String> optional = Optional.of("hello");
Optional<String> result = optional.flatMap(value -> Optional.of(value.toUpperCase()));
System.out.println(result.get());

3. Métodos comunes de Java Opcional

La clase Java Opcional proporciona muchos métodos útiles, aquí presentamos algunos de ellos.

método ofNullable()

El método ofNullable() acepta un objeto como parámetro y, si el objeto es nulo, devuelve un objeto opcional vacío. De lo contrario, envuelve el objeto en un contenedor opcional.

Aquí hay un código de muestra:

String str = null;
Optional<String> optional = Optional.ofNullable(str);

método isPresent()

El método isPresent() se utiliza para comprobar si hay un valor no nulo en el objeto Opcional. Si existe, devuelve verdadero; en caso contrario, devuelve falso.

Aquí hay un código de muestra:

String str = "Hello World";
Optional<String> optional = Optional.ofNullable(str);
if (optional.isPresent()) {
    System.out.println("String value: " + optional.get());
}

método ifPresent()

El método ifPresent() se utiliza para comprobar si hay un valor no nulo en el objeto Opcional. Si está presente, realiza la acción especificada; de lo contrario, no.

Aquí hay un código de muestra:

String str = "Hello World";
Optional<String> optional = Optional.ofNullable(str);
optional.ifPresent(s -> System.out.println("String value: " + s));

método orElse()

El método orElse() se utiliza para devolver un valor predeterminado cuando el objeto Opcional está vacío. Si el objeto Opcional no está vacío, devuelve el valor del objeto Opcional.

Aquí hay un código de muestra:

String str = null;
String defaultValue = "Default Value";
String value = Optional.ofNullable(str).orElse(defaultValue);
System.out.println("String value: " + value);

método mapa()

El método map() se utiliza para convertir el valor del objeto Opcional en otro tipo mediante la función de mapeo especificada.

Aquí hay un código de muestra:

String str = "Hello World";
Optional<String> optional = Optional.ofNullable(str);
Optional<Integer> lengthOptional = optional.map(String::length);
lengthOptional.ifPresent(length -> System.out.println("String length: " + length));

método filtro()

El método filter() se utiliza para filtrar los valores en el objeto Opcional. Devuelve un objeto Opcional si se cumple la condición especificada; de lo contrario, se devuelve un objeto Opcional vacío.

Aquí hay un código de muestra:

import java.util.Optional;

class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class OptionalFilterExample {
    public static void main(String[] args) {
        User user = new User("John", 30);
        Optional<User> optionalUser = Optional.of(user);

        Optional<User> filteredUser = optionalUser.filter(u -> u.getAge() >= 18);

        if (filteredUser.isPresent()) {
            System.out.println(filteredUser.get().getName() + " is an adult.");
        } else {
            System.out.println("No adult user found.");
        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/bairo007/article/details/132294430
Recomendado
Clasificación