English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Java control de flujo

Java arrays

Java orientación a objetos (I)

Java orientación a objetos (II)

Java orientación a objetos (III)

Manejo de excepciones en Java

Java listas (List)

Java colas (Queue)

Java mapas (Map)

Java conjuntos (Set)

Java entrada/salida (I/O)

Java Reader/Writer

Java otros temas

Java 8 Clase Optional

Java 8 Nuevas características

La clase Optional es un objeto contenedor que puede ser null. Si el valor existe, el método isPresent() devuelve true, y el método get() devuelve el objeto.

Optional es un contenedor: puede almacenar valores de tipo T o simplemente almacenar null. Optional proporciona muchos métodos útiles, de modo que no sea necesario realizar una detección explícita de valores nulos.

La introducción de la clase Optional se resolvió muy bien la excepción de elemento no encontrado.

Declaración de clase

A continuación se muestra un java.util.Optional<T> Declaración de la clase:

public final class Optional<T>
extiende Object

Método de clase

Número de ordenMétodo & Descripción
1static <T> Optional<T> empty()

Devuelve una instancia de Optional vacío.

2boolean equals(Object obj)

Determina si otro objeto es igual a Optional.

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

Si el valor existe y coincide con el predicate dado, devuelve un Optional que describe este valor, de lo contrario devuelve un Optional vacío.

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

Si el valor existe, devuelve un Optional basado en el valor del método de mapeo contenido en Optional, de lo contrario devuelve un Optional vacío.

5T get()

Si este valor está contenido en este Optional, devuelve el valor, de lo contrario lanza una excepción: NoSuchElementException

6int hashCode()

Devuelve el código de hash del valor existente, si el valor no existe devuelve 0.

7void ifPresent(Consumer<? super T> consumer)

Si el valor existe, se llama al consumer con ese valor, de lo contrario no se hace nada.

8boolean isPresent()

Si el valor existe, el método devuelve true, de lo contrario devuelve false.

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

Si hay un valor, se ejecuta la función de mapeo y se obtiene el valor de retorno. Si el valor de retorno no es null, se crea un Optional que contiene el valor de retorno del mapeo como valor de retorno del método map, de lo contrario se devuelve un Optional vacío.

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

返回一个指定非null值的Optional。

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

如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。

12T orElse(T other)

如果存在该值,返回值, 否则返回 other。

13T orElseGet(Supplier<? extends T> other)

如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。

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

如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常

15String toString()

返回一个Optional的非空字符串,用来调试

注意: 这些方法是从 java.lang.Object 类继承来的。

Optional 示例

我们可以通过以下示例来更好地了解 Optional 类的使用:

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 - 允许传递为 null 参数
      Optional<Integer> a = Optional.ofNullable(value1);
        
      // Optional.of - 如果传递的参数是 null,抛出异常 NullPointerException
      Optional<Integer> b = Optional.of(value2);
      System.out.println(java8Tester.sum(a, b));
   }
    
   public Integer sum(Optional<Integer> a, Optional<Integer> b){
    
      // Optional.isPresent - Determinar si el valor existe
        
      System.out.println("El valor del primer parámetro existe: " + a.isPresent());
      System.out.println("El valor del segundo parámetro existe: " + b.isPresent());
        
      // Optional.orElse - Si el valor existe, devuélvelo, de lo contrario, devuelve el valor predeterminado
      Integer value1 = a.orElse(new Integer(0));
        
      //Optional.get - Obtener el valor, el valor debe existir
      Integer value2 = b.get();
      return value1 + value2;
   }
}

Ejecutar el siguiente script, el resultado de salida será:

$ javac Java8Tester.java 
$ java Java8Tester
El valor del primer parámetro existe: false
El valor del segundo parámetro existe: true
10

Java 8 Nuevas características