Java Optional 是一個容器對象,用于表示可能存在或不存在的值。通過使用 Optional,你可以避免空指針異常(NullPointerException),并編寫更清晰、更簡潔的代碼。以下是如何使用 Java Optional 進行類型安全的編程的一些建議:
Optional.of(T value)
創建一個包含非空值的 Optional 對象。如果傳入的值為 null,將拋出 NullPointerException。Optional.ofNullable(T value)
創建一個包含值的 Optional 對象,如果傳入的值為 null,則創建一個空的 Optional 對象。Optional.empty()
創建一個空的 Optional 對象。Optional<String> optionalWithValue = Optional.of("Hello");
Optional<String> optionalWithNullValue = Optional.ofNullable(null);
Optional<String> emptyOptional = Optional.empty();
isPresent()
方法檢查 Optional 是否包含值。ifPresent(Consumer<? super T> consumer)
方法在 Optional 包含值時執行給定的操作。if (optionalWithValue.isPresent()) {
System.out.println(optionalWithValue.get());
}
optionalWithValue.ifPresent(value -> System.out.println(value));
get()
方法獲取 Optional 中的值。如果 Optional 為空,將拋出 NoSuchElementException。因此,在調用 get()
之前,請確保 Optional 包含值。orElse(T other)
方法獲取 Optional 中的值,如果 Optional 為空,則返回指定的默認值。orElseGet(Supplier<? extends T> other)
方法獲取 Optional 中的值,如果 Optional 為空,則調用指定的供應器函數生成默認值。orElseThrow(Supplier<? extends X> exceptionSupplier)
方法獲取 Optional 中的值,如果 Optional 為空,則拋出指定的異常。String value = optionalWithValue.orElse("Default value");
String valueFromSupplier = optionalWithNullValue.orElseGet(() -> "Default value from supplier");
String valueOrThrow = optionalWithNullValue.orElseThrow(() -> new NoSuchElementException("No value present"));
map(Function<? super T, ? extends U> mapper)
方法對 Optional 中的值進行轉換。如果 Optional 為空,返回一個空的 Optional 對象。flatMap(Function<? super T, Optional<U>> mapper)
方法對 Optional 中的值進行轉換。與 map
類似,但如果映射函數返回一個空的 Optional 對象,則 flatMap
會返回一個空的 Optional 對象。Optional<Integer> optionalLength = optionalWithValue.map(String::length);
Optional<String> optionalUpperCase = optionalWithValue.flatMap(value -> Optional.of(value.toUpperCase()));
filter(Predicate<? super T> predicate)
方法根據給定的謂詞過濾 Optional 中的值。如果 Optional 為空或值不滿足謂詞,則返回一個空的 Optional 對象。Optional<String> filteredOptional = optionalWithValue.filter(value -> value.length() > 5);
通過遵循這些實踐,你可以充分利用 Java Optional 的功能,編寫更安全、更簡潔的代碼。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。