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

Java Basic Tutorial

Java 流程控制

Java 数组

Java 面向对象(I)

Java 面向对象(II)

Java 面向对象(III)

Java Exception Handling

Java 列表(List)

Java Queue(队列)

Java Map集合

Java Set集合

Java 输入输出(I/O)

Java Reader/Writer

Java 其他主题

Java 8 Classe Optional

Java 8 New features

La classe Optional est un objet conteneur pouvant être null. Si la valeur existe, la méthode isPresent() retourne true, l'appel de la méthode get() retourne cet objet.

Optional est un conteneur : il peut stocker une valeur de type T ou simplement stocker null. Optional fournit de nombreuses méthodes utiles, de sorte que nous n'avons pas besoin de faire des vérifications explicites de valeurs vides.

L'introduction de la classe Optional résout bien les exceptions de NullPointerException.

Déclaration de classe

Voici un java.util.Optional<T> Déclaration de la classe :

public final class Optional<T>
extends Object

Méthode de classe

NuméroMéthode & Description
1static <T> Optional<T> empty()

Retourne un exemple d'Optional vide.

2boolean equals(Object obj)

Jugez si d'autres objets sont égaux à Optional.

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

Si la valeur existe et correspond à la predicate donnée, retourne un Optional pour décrire cette valeur, sinon retourne un Optional vide.

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

Si la valeur existe, retourne la valeur basée sur la méthode de mappage contenue dans Optional, sinon retourne un Optional vide.

5T get()

Si cette valeur existe dans cette Optional, retourne la valeur, sinon lancez une exception : NoSuchElementException

6int hashCode()

Retourne le code hash de la valeur existante, 0 est retourné si la valeur n'existe pas.

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

Si la valeur existe, utilisez cette valeur pour appeler consumer, sinon ne faites rien.

8boolean isPresent()

Si la valeur existe, la méthode retourne true, sinon retourne false.

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

Si la valeur existe, exécutez la fonction de mappage appelée et obtenez la valeur de retour. Si la valeur de retour n'est pas null, créez un Optional contenant la valeur de retour de la mappage en tant que valeur de retour de la méthode map, sinon retournez un Optional vide.

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 - Determine if the value exists
        
      System.out.println("The first parameter value exists: "); + a.isPresent());
      System.out.println("The second parameter value exists: "); + b.isPresent());
        
      // Optional.orElse - If the value exists, return it, otherwise return the default value
      Integer value1 = a.orElse(new Integer(0));
        
      //Optional.get - Get the value, the value must exist
      Integer value2 = b.get();
      return value1 + value2;
   }
}

Execute the above script, the output will be:

$ javac Java8Tester.java 
$ java Java8Tester
The first parameter value exists: false
The second parameter value exists: true
10

Java 8 New features