English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
Nachstehend ist ein java.util.Optional<T> Klassendeklaration:
public final class Optional<T> extends Object
Nummer | Methode & Beschreibung |
---|---|
1 | static <T> Optional<T> empty() Gibt ein leeres Optional-Beispiel zurück. |
2 | boolean equals(Object obj) Prüft, ob ein anderes Objekt gleich Optional ist. |
3 | Optional<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. |
5 | T get() Wird der Wert in diesem Optional enthalten, wird der Wert zurückgegeben, andernfalls wird eine Ausnahme: NoSuchElementException ausgelöst. |
6 | int hashCode() Gibt den Hashcode des vorhandenen Wertes zurück, falls der Wert nicht vorhanden ist, wird 0 zurückgegeben. |
7 | void ifPresent(Consumer<? super T> consumer) Wird der Wert vorhanden, wird consumer mit diesem Wert aufgerufen, andernfalls wird nichts getan. |
8 | boolean 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. |
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 - 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