English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
A seguir está um java.util.Optional<T> Declaração da Classe:
public final class Optional<T> extends Object
Número de Ordem | Método & Descrição |
---|---|
1 | static <T> Optional<T> empty() Retorna um exemplo de Optional vazio. |
2 | boolean equals(Object obj) �断其他对象是否等于 Optional。 |
3 | Optional<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 |
5 | T get() Se esse valor estiver incluído neste Optional, retorna o valor, caso contrário, lança uma exceção: NoSuchElementException |
6 | int hashCode() Retorna o código hash do valor existente, se o valor não existir, retorna 0. |
7 | void ifPresent(Consumer<? super T> consumer) Se o valor existir, use esse valor para chamar o consumer, caso contrário, não faça nada. |
8 | boolean 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. |
10 | static <T> Optional<T> of(T value) 返回一个指定非null值的Optional。 |
11 | static <T> Optional<T> ofNullable(T value) 如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。 |
12 | T orElse(T other) 如果存在该值,返回值, 否则返回 other。 |
13 | T orElseGet(Supplier<? extends T> other) 如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。 |
14 | <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) 如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常 |
15 | String toString() 返回一个Optional的非空字符串,用来调试 |
注意: 这些方法是从 java.lang.Object 类继承来的。
我们可以通过以下示例来更好地了解 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