Java?Optional用法面試題精講
Optional 類
Java 8 引入了 Optional
類,用于解決空指針異常(NullPointerException)的問(wèn)題。Optional
是一個(gè)容器類,可以包含一個(gè)非空的值或者表示值不存在。通過(guò)使用 Optional
,我們可以更加優(yōu)雅地處理可能為空的值,避免了繁瑣的空值檢查和異常處理。
常用方法
下面是 Optional
類的一些常用方法和用法:
創(chuàng)建
Optional
對(duì)象:- 使用
Optional.of(value)
:創(chuàng)建一個(gè)包含指定值的Optional
對(duì)象。如果傳入的值為null
,則會(huì)拋出NullPointerException
。 - 使用
Optional.ofNullable(value)
:創(chuàng)建一個(gè)包含指定值的Optional
對(duì)象。如果傳入的值為null
,則會(huì)創(chuàng)建一個(gè)空的Optional
對(duì)象。 - 使用
Optional.empty()
:創(chuàng)建一個(gè)空的Optional
對(duì)象。
- 使用
判斷值是否存在:
- 使用
isPresent()
方法:判斷Optional
對(duì)象中是否包含值。如果值存在,返回true
;否則,返回false
。
- 使用
獲取值:
- 使用
get()
方法:獲取Optional
對(duì)象中的值。如果值存在,返回該值;否則,拋出NoSuchElementException
異常。在使用get()
方法之前,最好先使用isPresent()
方法進(jìn)行判斷。
- 使用
處理值不存在的情況:
- 使用
ifPresent(Consumer<? super T> consumer)
方法:如果值存在,則執(zhí)行指定的操作。可以傳入一個(gè)Consumer
函數(shù)式接口,用于處理值存在的情況。 - 使用
orElse(T other)
方法:如果值不存在,則返回指定的默認(rèn)值。 - 使用
orElseGet(Supplier<? extends T> supplier)
方法:如果值不存在,則通過(guò)指定的供應(yīng)函數(shù)獲取一個(gè)默認(rèn)值。 - 使用
orElseThrow(Supplier<? extends X> exceptionSupplier)
方法:如果值不存在,則拋出指定的異常。
- 使用
簡(jiǎn)單的示例
下面是一個(gè)簡(jiǎn)單的示例,展示了 Optional
的用法:
import java.util.Optional; public class OptionalExample { public static void main(String[] args) { String value = "Hello, World!"; // 創(chuàng)建 Optional 對(duì)象 Optional<String> optional = Optional.of(value); // 判斷值是否存在 boolean isPresent = optional.isPresent(); System.out.println("Value is present: " + isPresent); // 獲取值 String retrievedValue = optional.get(); System.out.println("Retrieved value: " + retrievedValue); // 處理值存在的情況 optional.ifPresent(v -> System.out.println("Value exists: " + v)); // 處理值不存在的情況 String defaultValue = optional.orElse("Default Value"); System.out.println("Default value: " + defaultValue); // 使用函數(shù)式接口處理值不存在的情況 String suppliedValue = optional.orElseGet(() -> "Supplied Value"); System.out.println("Supplied value: " + suppliedValue); // 拋出異常處理值不存在的情況 try { String thrownValue = optional.orElseThrow(() -> new RuntimeException("Value not found")); System.out.println("Thrown value: " + thrownValue); } catch (RuntimeException e) { System.out.println("Exception: " + e.getMessage()); } } }
在這個(gè)示例中,我們創(chuàng)建了一個(gè)包含字符串值的 Optional
對(duì)象,并演示了判斷值是否存在、獲取值、處理值存在和值不存在的情況的用法。
使用 Optional
可以提高代碼的可讀性和健壯性,避免了繁瑣的空值檢查和異常處理。但需要注意的是,不要濫用 Optional
,在某些情況下,使用傳統(tǒng)的空值檢查可能更加合適。
以上就是Java Optional用法面試題精講的詳細(xì)內(nèi)容,更多關(guān)于Java Optional面試題的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java設(shè)計(jì)模式之原型模式詳細(xì)解析
這篇文章主要介紹了Java設(shè)計(jì)模式之原型模式詳細(xì)解析,原型模式就是用一個(gè)已經(jīng)創(chuàng)建的實(shí)例作為原型,通過(guò)復(fù)制該原型對(duì)象來(lái)創(chuàng)建一個(gè)和原型對(duì)象相同的新對(duì)象,需要的朋友可以參考下2023-11-11最長(zhǎng)重復(fù)子數(shù)組 findLength示例詳解
今天給大家分享一道比較常問(wèn)的算法面試題,最長(zhǎng)重復(fù)子數(shù)組 findLength,文中給大家分享解題思路,結(jié)合示例代碼介紹的非常詳細(xì),需要的朋友參考下吧2023-08-08SpringBoot項(xiàng)目速度提升之延遲初始化(Lazy Initialization)詳解
延遲初始化(Lazy?Initialization)是一種在需要時(shí)才創(chuàng)建或加載對(duì)象的策略,以減少啟動(dòng)時(shí)間和資源消耗,本文就來(lái)講講延遲初始化的具體使用吧2023-05-05java8中NIO緩沖區(qū)(Buffer)的數(shù)據(jù)存儲(chǔ)詳解
在本篇文章中小編給大家分享了關(guān)于java8中NIO緩沖區(qū)(Buffer)的數(shù)據(jù)存儲(chǔ)的相關(guān)知識(shí)點(diǎn),需要的朋友們參考下。2019-04-04Java獲取Excel中圖片所在的行和列坐標(biāo)位置
這篇文章主要介紹了Java獲取Excel中圖片所在的行和列坐標(biāo)位置,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08Spring?Boot配置內(nèi)容加密實(shí)現(xiàn)敏感信息保護(hù)
之前我們講過(guò)的配置相關(guān)知識(shí)都是Spring?Boot原生就提供的,而今天我們將介紹的功能并非Spring?Boot原生就支持,但卻非常有用:配置內(nèi)容的加密2021-11-11