Java8中的Optional類型

Introduction

在Java 8之前,如果我們需要在代碼中表示一個值可能為空的情況,我們唯一能做的就是將它設置為null。然而,這種方式是非常容易出bug的。在Null指針異常(NullPointerException)的問題中,Java 語言有一個了不起的產物叫 Optional.

正文

Optional的概念

Java 8引入了一個Optional類,建議使用 Optional 類來表示一個值存在或不存在。這個對象可以包含非空的對象(存在),或者NULL(不存在)。使用 Optional 的目的不是去除 null,而是提供了一種可變空值類型,使得程序員可以更加註意程序中可能會出現的 null值,這有助於減少NullpointerException的發生。

什麼是Optional?

Optional是一個簡單的容器類,它可以代表一個值存在或不存在,而不是使用null值來表示“沒有值”這種情況。這樣可以避免大量的if(foo!=null)這樣的代碼,並且在某種程度上提高了代碼的可讀性。Java 8的這個特性已經被其它很多語言借鑒了。

Optional的運用

我們可以通過下面的方式創建 Optional 對象:

Optional optional = Optional.of("Hello World");

或者我們要在一個方法中返回一個對象時,我們可以這樣寫:

public Optional getCustomObject() {
    if(condition == true) {
        return Optional.of(new CustomObject());
    } else {
        return Optional.empty();
    }
}

該方法可以避免返回值為null這種情況,並且可以在返回時立即知道返回值是否存在。

Optional的API

在 Optional 類中,包含很多有用的方法,這裡我們只介紹其中一些。

isPresent() 和 get()

isPresent(): 如果值存在返回true,否則返回false。

get(): 如果Optional有值則將其返回,否則拋出NoSuchElementException。

Optional optional = Optional.of("Hello World");

if(optional.isPresent()) {
    System.out.println(optional.get()); // 輸出: Hello World
}

orElse()

如果有值則將其返回,否則返回一個默認值。

Optional optional = Optional.empty();

System.out.println(optional.orElse("Hello World")); // 輸出: Hello World

orElseGet()

orElseGet()方法與orElse()方法非常相似,但其中一個區別是提供用於計算默認值的Supplier。

Optional optional = Optional.empty();

Supplier supplier = () -> "Hello World";

System.out.println(optional.orElseGet(supplier)); // 輸出: Hello World

orElseThrow()

orElseThrow() 方法與orElse() 方法和 orElseGet() 方法類似,但是拋出的是傳入的異常類型。

Optional optional = Optional.empty();

try {
    System.out.println(optional.orElseThrow(Exception::new)); // 拋出異常: Exception
} catch (Exception e) {
    e.printStackTrace();
}

map()

如果有值,則對其執行調用mapping函數得到返回值。否則返回 Optional.empty()。

Optional optional = Optional.of("Hello World");

Optional upperOptional = optional.map(String::toUpperCase);

System.out.println(upperOptional.get()); // 輸出: HELLO WORLD

flatMap()

flatMap() 方法與 map() 方法類似,區別在於 flatMap 中的 mapping 函數返回值必須是 Optional。

Optional optional = Optional.of("Hello World");

Function<String, Optional> function = s -> Optional.of(s.toUpperCase());

Optional flatMapOptional = optional.flatMap(function);

System.out.println(flatMapOptional.get()); // 輸出: HELLO WORLD

小結

Optional提供了一個比null更好的方式來表示一個值不存在的情況。如果我們使用得當,它可以幫助我們避免NullPointException的發生。

整篇文章都着重於讓大家了解Optional是什麼,它們如何工作,以及為什麼對代碼質量有所幫助。記住,在正確地使用Optional時,代碼將更具可讀性,更加健壯。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/246538.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:15
下一篇 2024-12-12 13:15

相關推薦

  • int類型變量的細節與注意事項

    本文將從 int 類型變量的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變量進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變量。 一、定義與聲明 int…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python基本數字類型

    本文將介紹Python中基本數字類型,包括整型、布爾型、浮點型、複數型,並提供相應的代碼示例以便讀者更好的理解。 一、整型 整型即整數類型,Python中的整型沒有大小限制,所以可…

    編程 2025-04-29
  • Python中的Bool類型判斷

    本篇文章旨在講解Python中的Bool類型判斷。在Python中,Bool類型是經常使用的一種類型,因此掌握其用法非常重要。 一、True和False 在Python中,True…

    編程 2025-04-29
  • Python函數類型有哪些

    本文將從以下幾個方面詳細闡述Python函數類型。 一、內置函數 Python的內置函數是指在Python編程語言中提供的可以直接使用的函數,不需要通過導入模塊等方式引入。 部分常…

    編程 2025-04-29
  • Python中的整數類型int類總覽

    本文將從多個方面,對Python中的整數類型int類進行全面介紹和闡述。 一、數據類型及基本操作 在Python中,整數類型的數據類型為int。在Python3.x中,整數類型的范…

    編程 2025-04-28
  • Python變量類型用法介紹

    Python是一種解釋型編程語言,它提供了豐富的數據類型,包括數字、字符串、列表、元組、集合、字典等。Python變量類型的定義是Python程序開發的基礎,本文將從以下幾個方面對…

    編程 2025-04-28
  • Python查詢變量類型的函數

    本文將從多個方面詳細闡述Python中查詢變量類型的函數,主要包括以下幾點: 一、type()函數 type()函數是Python內置的函數,用於查詢變量的類型。它的使用非常簡單,…

    編程 2025-04-28
  • 為什麼Python函數定義中沒有對參數指定類型?

    Python是一種強類型語言,也就是說語言本身會強制要求變量的類型。但是在Python函數定義中,卻沒有要求對參數指定類型。這是為什麼呢? 一、簡化函數定義 Python語言簡單明…

    編程 2025-04-28
  • Python語言列表中的元素類型可以不相同

    Python語言的列表是一種有序的集合,可以包含任意數量和任意類型的Python對象,包括數字、字符串甚至是其他列表對象,這樣的特性稱為Python語言列表中的元素類型可以不相同。…

    編程 2025-04-28

發表回復

登錄後才能評論