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

Tutoriais Básicos de Java

Java controle de fluxo

Java array

Java orientação a objetos (I)

Java orientação a objetos (II)

Java orientação a objetos (III)

Tratamento de Exceções Java

Java lista (List)

Java fila (Fila)

Java conjuntos Map

Java conjuntos Set

Java entrada e saída (I/O)

Java Reader/Writer

Java outros tópicos

Java 8 Classe Optional

Java 8 Novas Características

A classe Optional é um objeto contêiner que pode ser null. Se o valor existir, o método isPresent() retornará true, e a chamada do método get() retornará o objeto.

Optional é um contêiner: ele pode armazenar um valor do tipo T ou simplesmente armazenar null. Optional oferece muitos métodos úteis, de modo que não precisamos fazer a verificação explícita de valores nulos.

A introdução da classe Optional resolve muito bem a exceção de referência nula.

Declaração de Classe

A seguir está um java.util.Optional<T> Declaração da Classe:

public final class Optional<T>
extends Object

Método de Classe

Número de OrdemMétodo & Descrição
1static <T> Optional<T> empty()

Retorna um exemplo de Optional vazio.

2boolean equals(Object obj)

�断其他对象是否等于 Optional。

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

Se o valor existir e este valor coincidir com o predicate fornecido, retorna um Optional para descrever esse valor, caso contrário, retorna um Optional vazio.

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

Se o valor existir, retorna o valor com base no método de mapeamento contido no Optional, caso contrário, retorna um Optional vazio

5T get()

Se esse valor estiver incluído neste Optional, retorna o valor, caso contrário, lança uma exceção: NoSuchElementException

6int hashCode()

Retorna o código hash do valor existente, se o valor não existir, retorna 0.

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

Se o valor existir, use esse valor para chamar o consumer, caso contrário, não faça nada.

8boolean isPresent()

Se o valor existir, o método retornará true, caso contrário, retornará false.

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

Se houver valor, execute a chamada da função de mapeamento para obter o valor de retorno. Se o valor de retorno não for null, crie um Optional contendo o valor de retorno do mapeamento como valor de map método de retorno, caso contrário, retorne um Optional vazio.

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 - Verificar se o valor existe
        
      System.out.println("O valor do primeiro parâmetro existe: " + a.isPresent());
      System.out.println("O valor do segundo parâmetro existe: " + b.isPresent());
        
      // Optional.orElse - Se o valor existir, retorne-o, caso contrário, retorne o valor padrão
      Integer value1 = a.orElse(new Integer(0));
        
      //Optional.get - Obter valor, o valor deve existir
      Integer value2 = b.get();
      return value1 + value2;
   }
}

Execute o script acima e o resultado será:

$ javac Java8Tester.java 
$ java Java8Tester
O valor do primeiro parâmetro existe: false
O valor do segundo parâmetro existe: true
10

Java 8 Novas Características