成人免费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消滅空指針

2024-05-06 12:30:51

Go語言中間件

2022-07-11 10:51:25

Java 8OptionalNPE

2025-01-20 07:10:00

LambdaJavanull

2023-10-10 13:23:18

空指針異常Java

2024-08-12 08:28:35

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

2019-03-11 09:18:20

Java 8Stream數據結構

2020-09-25 11:30:20

Java判空代碼

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技術棧公眾號

主站蜘蛛池模板: 免费h视频 | 日韩精品一区二区三区视频播放 | 久久最新 | 午夜精品一区二区三区在线观看 | 黄在线免费观看 | 亚洲一区二区免费视频 | 国产成人精品免高潮在线观看 | 中文字幕在线一区二区三区 | www.色53色.com| 久久在线视频 | 精品国产一区二区三区在线观看 | 欧美精品在线观看 | 午夜一区二区三区在线观看 | 国产一区免费视频 | 亚洲欧美一区二区三区情侣bbw | 在线免费国产 | 亚洲小视频| 亚州精品天堂中文字幕 | 国产91在线视频 | 亚洲欧美激情精品一区二区 | www狠狠爱com | www.47久久青青 | 国产精品视频在线播放 | 国产精品久久久久久久久久久久久 | 国产精品九九九 | 久久一区二区三区四区五区 | 在线视频一区二区三区 | 新超碰97 | 日韩高清国产一区在线 | 日韩欧美综合 | 国产欧美日韩一区二区三区在线观看 | 999国产视频 | 国产精品成人一区 | 欧美日韩精品区 | 亚洲欧洲一区二区 | 久久网亚洲 | 99re66在线观看精品热 | 日韩美女在线看免费观看 | 国产成人精品一区二三区在线观看 | 日本亚洲欧美 | 久久久www成人免费无遮挡大片 |