Java 8 Optional-Klasse

Java 8 新特性Neue Funktionen in Java 8


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

Optional ist ein Container: Er kann einen Wert vom Typ T oder einfach null enthalten. Optional bietet viele nützliche Methoden, sodass wir keine expliziten Nullwertprüfungen durchführen müssen.

Die Einführung der Optional-Klasse behebt die NullPointerException effektiv.

Klassendeklaration

Das Folgende ist einejava.util.Optional<T>-Klassendeklaration:

public final class Optional<T> extends Objekt

Klassenmethoden

Laufende Nummer Methode & Beschreibung
1 static <T> Optional<T> empty()

Gibt eine leere Optional-Instanz zurück.

2 boolean equals(Object obj)

Bestimmt, ob ein anderes Objekt gleich dem Optional ist.

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

Wenn der Wert vorhanden ist und mit dem angegebenen Predicate übereinstimmt, wird ein Optional zurückgegeben, das diesen Wert beschreibt; andernfalls wird ein leeres Optional zurückgegeben.

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

Wenn ein Wert vorhanden ist, wird der Wert basierend auf der im Optional enthaltenen Mapping-Methode zurückgegeben; andernfalls wird ein leeres Optional zurückgegeben.

5 T get()

Wenn der Wert in diesem Optional enthalten ist, wird der Wert zurückgegeben; andernfalls wird eine Ausnahme ausgelöst: NoSuchElementException

6 int hashCode()

Gibt den Hashcode des vorhandenen Werts zurück oder 0, wenn der Wert nicht vorhanden ist.

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

Wenn ein Wert vorhanden ist, wird der Consumer mit dem Wert aufgerufen; andernfalls wird nichts getan.

8 boolean isPresent()

Die Methode gibt true zurück, wenn der Wert vorhanden ist, andernfalls gibt sie false zurück.

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

Wenn ein Wert vorhanden ist, wird die Mapping-Funktion darauf angewendet und der Rückgabewert ermittelt. Wenn der Rückgabewert nicht null ist, wird ein Optional erstellt, das den gemappten Rückgabewert als Rückgabewert der map-Methode enthält; andernfalls wird ein leeres Optional zurückgegeben.

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

Gibt ein Optional mit dem angegebenen Nicht-Null-Wert zurück.

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

Wenn der Wert nicht null ist, wird ein Optional zurückgegeben, das den angegebenen Wert beschreibt; andernfalls wird ein leeres Optional zurückgegeben.

12 T orElse(T other)

Wenn der Wert vorhanden ist, wird der Wert zurückgegeben; andernfalls wird other zurückgegeben.

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

Wenn der Wert vorhanden ist, wird der Wert zurückgegeben; andernfalls wird other aufgerufen und das Ergebnis dieses Aufrufs zurückgegeben.

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

Wenn der Wert vorhanden ist, wird der enthaltene Wert zurückgegeben; andernfalls wird eine vom Supplier bereitgestellte Ausnahme ausgelöst.

15 String toString()

Gibt eine Zeichenkette des Optional zurück, die nicht null ist und zum Debuggen verwendet wird.

Hinweis:Diese Methoden werden von der Klassejava.lang.Objectgeerbt.


Optional-Instanz

Anhand der folgenden Beispiele können wir die Verwendung der Optional-Klasse besser verstehen:

Java8Tester.java-Datei

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 - Ermöglicht die Übergabe von null-Parametern Optional<Integer> a = Optional.ofNullable(value1); //Optional.of - Wirft NullPointerException, wenn der übergebene Parameter null ist Optional<Integer> b = Optional.of(value2); System.out.println(java8Tester.sum(a,b)); } public Integer sum(Optional<Integer> a, Optional<Integer> b){ //Optional.isPresent - Bestimmt, ob der Wert vorhanden ist System.out.println("Der Wert des ersten Parameters ist vorhanden:" + a.isPresent()); System.out.println("Der Wert des zweiten Parameters ist vorhanden:" + b.isPresent()); //Optional.orElse - Wenn der Wert vorhanden ist, wird er zurückgegeben; andernfalls wird der Standardwert zurückgegeben. Integer value1 = a.orElse(new Integer(0)); //Optional.get - Ruft den Wert ab; der Wert muss vorhanden sein. Integer value2 = b.get(); return value1 + value2; } }

Die Ausführung des obigen Skripts erzeugt die folgende Ausgabe:

$ javac Java8Tester.java 
$ java Java8Tester
第一个参数值存在: false
第二个参数值存在: true
10

Java 8 新特性Neue Funktionen in Java 8

Andere Erweiterungen