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

Java Grundlagenanleitung

Java Flusskontrolle

Java Array

Java objektorientiert(I)

Java objektorientiert(II)

Java objektorientiert(III)

Java Ausnahmebehandlung

Java Liste(List)

Java Queue(Knoten)

Java Map-Kollektion

Java Set-Kollektion

Java Eingabe/Ausgabe(I/O)

Java Reader/Writer

Java andere Themen

Java 8 Optional-Klasse

Java 8 New Features

Die Optional-Klasse ist ein Behälter, der null sein kann. Wenn der Wert vorhanden ist, gibt die Methode isPresent() true zurück, und der Aufruf der Methode get() gibt das Objekt zurück.

Optional ist ein Behälter: Er kann Werte des Typs T speichern oder nur null. Optional bietet viele nützliche Methoden, sodass wir keine explizite Wertprüfung durchführen müssen.

Die Einführung der Optional-Klasse löst die Null-Pointer-Exception hervorragend.

Klassendeklaration

Nachstehend ist ein java.util.Optional<T> Klassendeklaration:

public final class Optional<T>
extends Object

Klassenmethode

NummerMethode & Beschreibung
1static <T> Optional<T> empty()

Gibt ein leeres Optional-Beispiel zurück.

2boolean equals(Object obj)

Prüft, ob ein anderes Objekt gleich Optional ist.

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

Wird der Wert vorhanden und dieser Wert entspricht dem gegebenen predicate, wird ein Optional zurückgegeben, der diesen Wert beschreibt, andernfalls wird ein leerer Optional zurückgegeben.

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

Wird der Wert vorhanden, wird ein Optional zurückgegeben, das auf den Wert der Abbildungsmethode basiert, andernfalls wird ein leerer Optional zurückgegeben.

5T get()

Wird der Wert in diesem Optional enthalten, wird der Wert zurückgegeben, andernfalls wird eine Ausnahme: NoSuchElementException ausgelöst.

6int hashCode()

Gibt den Hashcode des vorhandenen Wertes zurück, falls der Wert nicht vorhanden ist, wird 0 zurückgegeben.

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

Wird der Wert vorhanden, wird consumer mit diesem Wert aufgerufen, andernfalls wird nichts getan.

8boolean isPresent()

Wird der Wert vorhanden, gibt die Methode true zurück, andernfalls false.

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

Wenn ein Wert vorhanden ist, wird die Abbildungsfunktion auf diesen Wert angewendet, um den Rückgabewert zu erhalten. Wenn der Rückgabewert nicht null ist, wird ein Optional, das die Abbildungsreturnwerte enthält, als Rückgabewert der map-Methode erstellt, andernfalls wird ein leerer Optional zurückgegeben.

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 - Check if the value exists
        
      System.out.println("The value of the first parameter exists: "); + a.isPresent());
      System.out.println("The value of the second parameter 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, and the output will be:

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

Java 8 New Features