Uso básico de la clase opcional en Java8

1. Introducción

  • Opcional es un objeto contenedor que puede contener o no un valor determinado.
  • Está diseñado para resolver el problema de excepción del puntero nulo.
  • El uso de Opcional evita la verificación explícita de valores nulos en su código, lo que hace que su código sea más conciso y legible.

2. Uso común de Opcional:

1. Cree un objeto opcional:

1.1 Uso del método ():

Crea un objeto opcional que contiene el valor no nulo especificado.

A continuación se muestra un ejemplo del uso del método of() para crear un objeto opcional:

import java.util.Optional;

public class OptionalDemo {
    
    
    public static void main(String[] args) {
    
    
        String value = "Hello World!";
        Optional<String> optional = Optional.of(value);

        // 检查Optional是否包含值
        if (optional.isPresent()) {
    
    
            System.out.println("Optional包含值: " + optional.get());
        } else {
    
    
            System.out.println("Optional为空");
        }
    }
}

En este ejemplo, usamos el método of() para crear un objeto Opcional que contiene un valor no nulo. Luego verificamos si el Opcional contiene un valor llamando al método isPresent(). Si Opcional contiene un valor, llame al método get() para obtener el valor e imprimir la salida; de lo contrario, la salida impresa Opcional está vacía.

La salida es:

Optional包含值: Hello World!

Nota: Cuando se utiliza el método of(), si el valor pasado es nulo, se generará una NullPointerException inmediatamente. Por lo tanto, cuando utilice el método of() para crear un objeto opcional, debe asegurarse de que el valor pasado no esté vacío. Si el valor puede ser nulo, puede crear un objeto opcional utilizando el método ofNullable(), que puede aceptar valores nulos.

1.2 Uso del método Nullable():

Crea un objeto Opcional que contiene el valor especificado, o un objeto Opcional vacío si el valor es nulo.

A continuación se muestra un ejemplo del uso del método ofNullable() para crear un objeto opcional:

import java.util.Optional;

public class OptionalDemo {
    
    
    public static void main(String[] args) {
    
    
        String value = null;
        Optional<String> optional = Optional.ofNullable(value);

        // 检查Optional是否包含值
        if (optional.isPresent()) {
    
    
            System.out.println("Optional包含值: " + optional.get());
        } else {
    
    
            System.out.println("Optional为空");
        }
    }
}

En este ejemplo, utilizamos el método ofNullable() para crear un objeto opcional que contiene el valor especificado. Si el valor es nulo, se crea un objeto Opcional vacío. Luego verificamos si el Opcional contiene un valor llamando al método isPresent(). Si Opcional contiene un valor, llame al método get() para obtener el valor e imprimir la salida; de lo contrario, la salida impresa Opcional está vacía.

La salida es:

Optional为空

Nota: Los objetos opcionales creados con el método ofNullable() pueden aceptar valores nulos y no generarán NullPointerException inmediatamente. Esto permite una mayor flexibilidad en el manejo de valores potencialmente nulos.

1.3 Utilice el método vacío():

Crea un objeto Opcional vacío.

A continuación se muestra un ejemplo del uso del método vacío() para crear un objeto Opcional vacío:

import java.util.Optional;

public class OptionalDemo {
    
    
    public static void main(String[] args) {
    
    
        Optional<String> optional = Optional.empty();

        // 检查Optional是否包含值
        if (optional.isPresent()) {
    
    
            System.out.println("Optional包含值: " + optional.get());
        } else {
    
    
            System.out.println("Optional为空");
        }
    }
}

En este ejemplo, creamos un objeto Opcional vacío usando el método vacío(). Luego verificamos si el Opcional contiene un valor llamando al método isPresent(). Dado que el objeto Opcional que creamos usando el método vacío() está vacío, el valor de retorno de isPresent() es falso y el programa imprimirá que el Opcional está vacío.

La salida es:

Optional为空

Los objetos opcionales creados con el método vacío() siempre están vacíos y no contienen ningún valor. Esto se puede utilizar para representar valores faltantes en algunos casos.

2. Determine si Opcional contiene un valor:

2.1 Utilice el método isPresent():

Devuelve verdadero si el objeto Opcional contiene un valor; falso en caso contrario.

3. Obtenga el valor en Opcional:

3.1 Utilice el método get():

Si el objeto Opcional contiene un valor, se devuelve el valor; de lo contrario, se genera una excepción NoSuchElementException.

Aquí hay un código de muestra:

import java.util.Optional;

public class OptionalDemo {
    
    
    public static void main(String[] args) {
    
    
        Optional<String> optional = Optional.of("Hello World");

        try {
    
    
            String value = optional.get();
            System.out.println("Optional的值: " + value);
        } catch (NoSuchElementException e) {
    
    
            System.out.println("Optional为空");
        }
    }
}

En este ejemplo, utilizamos el método of() para crear un objeto opcional no nulo y pasar la cadena "Hola mundo" como valor. Luego, usamos el método get() para obtener el valor del objeto Opcional y realizar las operaciones correspondientes.

La salida es:

Optional的值: Hello World

Si configuramos el objeto Opcional para que esté vacío:

Optional<String> optional = Optional.empty();

Entonces opcional.get() arrojará NoSuchElementException porque el objeto Opcional está vacío.

Tenga en cuenta que cuando utilice el método get(), primero debe utilizar el método isPresent() para comprobar si el objeto Opcional contiene un valor para evitar generar una excepción.

3.2 Utilice el método orElse():

Si el objeto Opcional contiene un valor, entonces se devuelve ese valor; de lo contrario, se devuelve el valor predeterminado especificado.

Aquí hay un código de muestra:

import java.util.Optional;

public class OptionalDemo {
    
    
    public static void main(String[] args) {
    
    
        Optional<String> optional = Optional.of("Hello World");
        
        String value = optional.orElse("Default Value");

        System.out.println("Optional的值: " + value);
    }
}

En este ejemplo, utilizamos el método of() para crear un objeto opcional no nulo y pasar la cadena "Hola mundo" como valor. Luego, usamos el método orElse() para obtener el valor del objeto Opcional. Si el objeto Opcional está vacío, se devuelve el valor predeterminado especificado "Valor predeterminado".

La salida es:

Optional的值: Hello World

Si configuramos el objeto Opcional para que esté vacío:

Optional<String> optional = Optional.empty();

Luego, opcional.orElse("Valor predeterminado") devolverá el valor predeterminado especificado "Valor predeterminado" porque el objeto opcional está vacío.

Al utilizar el método orElse(), puede evitar generar excepciones y proporcionar un valor predeterminado para manejar el caso en el que el objeto Opcional esté vacío.

3.3 Utilice el método orElseGet():

Si el objeto Opcional contiene un valor, se devuelve el valor; de lo contrario, se genera un valor predeterminado llamando al método proporcionado por la interfaz del Proveedor.

Aquí hay un código de muestra:

import java.util.Optional;

public class OptionalDemo {
    
    
    public static void main(String[] args) {
    
    
        Optional<String> optional = Optional.empty();
        
        String value = optional.orElseGet(() -> generateDefaultValue());

        System.out.println("Optional的值: " + value);
    }
    
    public static String generateDefaultValue() {
    
    
        System.out.println("生成默认值");
        return "Default Value";
    }
}

En este ejemplo, creamos un objeto Opcional vacío usando el método vacío(). Luego, usamos el método orElseGet() para obtener el valor del objeto Opcional. Si el objeto Opcional está vacío, se genera un valor predeterminado llamando al método generateDefaultValue().

El método generateDefaultValue() es un método personalizado que se utiliza para generar valores predeterminados. En este ejemplo, simplemente imprimimos un mensaje "Generar valor predeterminado" y luego devolvemos el valor predeterminado "Valor predeterminado".

La salida es:

生成默认值
Optional的值: Default Value

Dado que el objeto Opcional está vacío, se llama al método generateDefaultValue() para generar un valor predeterminado.

Cuando se utiliza el método orElseGet(), la interfaz del proveedor proporciona una forma más flexible de generar valores predeterminados, como el uso de expresiones lambda o referencias de métodos. Esto nos permite generar dinámicamente valores predeterminados según sea necesario.

3.4 Utilice el método orElseThrow():

Si el objeto Opcional contiene un valor, se devuelve el valor; de lo contrario, se genera la excepción especificada llamando al método proporcionado por la interfaz del Proveedor.

Aquí hay un código de muestra:

import java.util.Optional;

public class OptionalDemo {
    
    
    public static void main(String[] args) {
    
    
        Optional<String> optional = Optional.empty();
        
        try {
    
    
            String value = optional.orElseThrow(() -> new IllegalArgumentException("值为空"));
            System.out.println("Optional的值: " + value);
        } catch (IllegalArgumentException e) {
    
    
            System.out.println("捕获到异常: " + e.getMessage());
        }
    }
}

En este ejemplo, creamos un objeto Opcional vacío usando el método vacío(). Luego, usamos el método orElseThrow() para obtener el valor del objeto Opcional. Si el objeto Opcional está vacío, se genera la excepción especificada llamando al método proporcionado por la interfaz del Proveedor.

En este ejemplo, utilizamos la expresión lambda () -> nueva IllegalArgumentException ("el valor está vacío") como la implementación de la interfaz del proveedor. Cuando el objeto opcional está vacío, se generará una excepción IllegalArgumentException y el mensaje de excepción se especificará como "valor" Está vacío".

La salida es:

捕获到异常: 值为空

Dado que el objeto Opcional está vacío, se genera una excepción IllegalArgumentException y se imprime el mensaje de excepción.

Cuando se utiliza el método orElseThrow(), la interfaz del proveedor puede proporcionar una forma más flexible de generar excepciones, como el uso de expresiones lambda o referencias de métodos. Esto nos permite lanzar dinámicamente diferentes excepciones según sea necesario.

4. Convierta el valor en Opcional:

4.1 Utilice el método map():

Convierta el valor en Opcional y devuelva un nuevo objeto Opcional.

Aquí hay un código de muestra:

import java.util.Optional;

public class OptionalDemo {
    
    
    public static void main(String[] args) {
    
    
        Optional<String> optional = Optional.of("Hello");
        
        Optional<String> result = optional.map(value -> value + " World");
        System.out.println("转换后的Optional的值: " + result.orElse(""));
    }
}

En este ejemplo, usamos el método of() para crear un objeto Opcional que contiene el valor "Hola". Luego usamos el método map() para transformar el valor y concatenarlo con "Mundo". Finalmente, usamos el método orElse() para obtener el valor convertido, y si el objeto Opcional convertido está vacío, se devuelve una cadena vacía.

La salida es:

转换后的Optional的值: Hello World

Dado que los objetos opcionales contienen valores, el método map() concatena el valor con "Mundo" y devuelve un nuevo objeto opcional. Finalmente, obtenemos el valor convertido mediante el método orElse() y lo imprimimos en la consola.

El uso del método map() puede convertir fácilmente el valor del objeto Opcional sin la necesidad de realizar una verificación adicional del valor nulo. Esto hace que el código sea más conciso y legible.

4.2 Utilice el método flatMap():

Convierta el valor en Opcional y devuelva un nuevo objeto Opcional.

Aquí hay un código de muestra:

import java.util.Optional;

public class OptionalDemo {
    
    
    public static void main(String[] args) {
    
    
        Optional<String> optional = Optional.of("Hello");
        
        Optional<String> result = optional.flatMap(value -> Optional.of(value + " World"));
        System.out.println("转换后的Optional的值: " + result.orElse(""));
    }
}

En este ejemplo, usamos el método of() para crear un objeto Opcional que contiene el valor "Hola". Luego usamos el método flatMap() para convertir el valor, lo concatenamos con "Mundo" y usamos el método of() para envolver el resultado en un nuevo objeto Opcional. Finalmente, usamos el método orElse() para obtener el valor convertido, y si el objeto Opcional convertido está vacío, se devuelve una cadena vacía.

La salida es:

转换后的Optional的值: Hello World

Dado que los objetos opcionales contienen valores, el método flatMap() concatena el valor con "Mundo" y devuelve un nuevo objeto opcional. Finalmente, obtenemos el valor convertido mediante el método orElse() y lo imprimimos en la consola.

El valor del objeto Opcional se puede convertir fácilmente utilizando el método flatMap() y se pueden llamar múltiples operaciones de conversión en una cadena. Esto hace que el código sea más flexible y legible.

Supongo que te gusta

Origin blog.csdn.net/qq_39939541/article/details/132308574
Recomendado
Clasificación