成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java Optional:優雅處理空值的藝術

開發 前端
Optional類是Java 8引入的一個重要特性,它提供了一種更加優雅和安全的方式來處理可能為null的對象。通過合理使用Optional,我們可以有效減少空指針異常的發生,使代碼更加健壯和易于維護。

在Java編程中,空指針異常(NullPointerException)是開發者經常遇到的一個“坑”。為了更加優雅地處理可能為null的對象,Java 8引入了Optional類。Optional是一個可以包含也可以不包含非null值的容器對象,它提供了一種更好的方式來處理可能為null的對象,避免直接使用null值導致的空指針異常。

1.基礎用法

創建Optional對象

  • 使用Optional.of(T value):如果value為null,則拋出NullPointerException。
  • 使用Optional.ofNullable(T value):允許value為null。
Optional<String> optionalString1 = Optional.of("Hello, World!");
Optional<String> optionalString2 = Optional.ofNullable(null); // 不拋出異常

獲取值

  • 使用get():如果Optional對象包含值,則返回該值,否則拋出NoSuchElementException。
  • 使用orElse(T other):如果Optional對象包含值,則返回該值,否則返回other。
String result1 = optionalString1.get(); // 返回 "Hello, World!"
String result2 = optionalString2.orElse("Default Value"); // 返回 "Default Value"

檢查值是否存在

  • 使用isPresent():如果Optional對象包含值,則返回true,否則返回false。
  • 使用ifPresent(Consumer consumer):如果Optional對象包含值,則執行給定的操作。
boolean isPresent = optionalString1.isPresent(); // 返回 true
optionalString1.ifPresent(value -> System.out.println(value)); // 輸出 "Hello, World!"

2.高階用法

轉換值

  • 使用map(Function mapper):如果Optional對象包含值,則對其應用給定的函數,返回包含結果的Optional對象。
Optional<Integer> optionalLength = optionalString1.map(String::length); // 返回 Optional[13]

平坦化Optional

  • 使用flatMap(Function> mapper):如果Optional對象包含值,則對其應用給定的函數,并返回結果Optional對象;如果結果為null,則返回一個空的Optional對象。
Optional<String> optionalUpperCase = optionalString1.flatMap(value -> Optional.ofNullable(value.toUpperCase())); // 返回 Optional["HELLO, WORLD!"]

過濾值

  • 使用filter(Predicate predicate):如果Optional對象包含的值滿足給定的謂詞條件,則返回該Optional對象;否則返回一個空的Optional對象。
Optional<String> optionalFiltered = optionalString1.filter(value -> value.contains("World")); // 返回 Optional["Hello, World!"]
Optional<String> optionalFilteredEmpty = optionalString1.filter(value -> value.contains("Java")); // 返回 Optional.empty()

自定義默認值

  • 使用orElseThrow(Supplier exceptionSupplier):如果Optional對象不包含值,則拋出由給定的Supplier提供的異常。
try {
    String result3 = optionalString2.orElseThrow(() -> new IllegalArgumentException("Value is missing!"));
} catch (IllegalArgumentException e) {
    System.out.println(e.getMessage()); // 輸出 "Value is missing!"
}

代碼示例匯總

import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
public class OptionalExample {
    public static void main(String[] args) {
        // 基礎用法
        Optional<String> optionalString1 = Optional.of("Hello, World!");
        Optional<String> optionalString2 = Optional.ofNullable(null);
        String result1 = optionalString1.get(); // 獲取值
        String result2 = optionalString2.orElse("Default Value"); // 使用默認值
        boolean isPresent = optionalString1.isPresent(); // 檢查值是否存在
        optionalString1.ifPresent(value -> System.out.println(value)); // 如果存在,執行操作
        // 高階用法
        Optional<Integer> optionalLength = optionalString1.map(String::length); // 轉換值
        Optional<String> optionalUpperCase = optionalString1.flatMap(value -> Optional.ofNullable(value.toUpperCase())); // 平坦化Optional
        Optional<String> optionalFiltered = optionalString1.filter(value -> value.contains("World")); // 過濾值
        try {
            String result3 = optionalString2.orElseThrow(() -> new IllegalArgumentException("Value is missing!")); // 自定義默認值(拋出異常)
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
        }
    }
}

3.小結

Optional類是Java 8引入的一個重要特性,它提供了一種更加優雅和安全的方式來處理可能為null的對象。通過合理使用Optional,我們可以有效減少空指針異常的發生,使代碼更加健壯和易于維護。希望本文能幫助你更好地理解和應用Optional。

責任編輯:武曉燕 來源: JAVA充電
相關推薦

2023-10-08 11:09:22

Optional空指針

2024-10-15 15:58:11

2023-08-04 08:52:52

Optional消滅空指針

2022-07-11 10:51:25

Java 8OptionalNPE

2024-05-06 12:30:51

Go語言中間件

2025-01-20 07:10:00

LambdaJavanull

2024-08-12 08:28:35

2023-10-10 13:23:18

空指針異常Java

2024-12-06 10:12:20

2021-11-15 06:56:45

系統運行空指針

2017-06-29 11:26:08

Python數據可視化

2025-06-19 09:13:10

空指針編程C++17

2024-02-01 12:09:17

Optional容器null

2024-02-28 09:03:20

Optional空指針Java

2020-09-25 11:30:20

Java判空代碼

2019-03-11 09:18:20

Java 8Stream數據結構

2020-04-10 10:22:12

Java判空編程語言

2023-11-18 09:17:56

Optional代碼

2017-06-03 16:49:37

Python數據可視化

2020-12-28 06:20:27

OptionalTryjava
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人在线视频一区 | 欧美精品久久久久久久久久 | 日本天堂视频在线观看 | 亚洲免费视频一区二区 | 欧美在线一区二区三区 | 久久久精选 | 一区二区三区免费 | av网站在线看| 久久精品视频网站 | 亚洲精品一区二区二区 | 精品亚洲一区二区三区四区五区 | 综合激情av| 伊人久久综合 | 国产欧美精品一区 | 久久久久国产成人精品亚洲午夜 | 久久久福利 | 国产一区二区三区久久久久久久久 | 国产麻豆一区二区三区 | 亚洲欧美国产精品久久 | 欧美成人精品一区二区男人看 | 国产精品色一区二区三区 | 成人亚洲性情网站www在线观看 | 操操操操操 | 国产日本精品视频 | 日本三级电影在线观看视频 | 午夜色播 | 一级做受毛片免费大片 | 成人午夜高清 | 殴美黄色录像 | 国产精品国产三级国产aⅴ原创 | 特级做a爰片毛片免费看108 | 高清一区二区 | 日韩免费高清视频 | 狠狠的干| 欧美mv日韩mv国产网站91进入 | 国产一区二区三区视频 | 国产欧美精品一区二区三区 | 天堂久久一区 | 91人人视频在线观看 | 在线观看av网站永久 | 黑人久久久 |