JAVA Optional類用法分享
Optional在JAVA中被定義為一個(gè)容器類,更確切的說只存一個(gè)元素的容器。
container object which may or may not contain a non-null value.
Optional類結(jié)構(gòu) Optional屬性
Optional類中包含兩個(gè)屬性:
類屬性:EMPTY 對(duì)象屬性:value
EMPTY屬性用來存放一個(gè)value為null的Optional對(duì)象。
value屬性用來存放非null對(duì)象。
Optional方法
Optional的有兩個(gè)構(gòu)造方法,都被private修飾。
private Optional() { this.value = null; } private Optional(T value) { this.value = Objects.requireNonNull(value); }
無參構(gòu)造方法用來初始化EMPTY。有參構(gòu)造方法用來初始化非null對(duì)象。
因?yàn)闃?gòu)造方法被修飾為私有的,Optional想要實(shí)例化對(duì)象只能通過類方法調(diào)用。Optional提供三個(gè)類方法。
empty:返回value為null的Optional對(duì)象 of:返回value非null的Optional對(duì)象 ofNullable:value的值根據(jù)參數(shù)是否為null返回對(duì)應(yīng)的Optional對(duì)象
public static<T> Optional<T> empty() { Optional<T> t = (Optional<T>) EMPTY; return t; } public static <T> Optional<T> of(T value) { return new Optional<>(value); } public static <T> Optional<T> ofNullable(T value) { return value == null ? empty() : of(value); }
實(shí)例方法介紹
方法 | 參數(shù)類型 | 返回類型 | 說明 | |
---|---|---|---|---|
get | 無 | T | value為null拋出NoSuchElementException異常 | |
isPresent | 無 | boolean | value為null則返回false | |
ifPresent | Consumer<? super T> | void | 如果Optional實(shí)例有值則為其調(diào)用consumer,否則不做處理 | |
filter | Predicate<? super T> | Optional<T> | 如果值存在并且滿足提供的謂詞,就返回包括該值的Optional對(duì)象;否則返回一個(gè)空的Optional對(duì)象 | |
map | Function<? super T, ? extends U> | Optional<U> | 如果值存在,就對(duì)該值執(zhí)行提供的mapping函數(shù)調(diào)用,返回Optional<U>對(duì)象 | |
flatMap | Function<? super T, Optional<U>> | Optional<U> | 如果值存在,就對(duì)該值執(zhí)行提供的mapping函數(shù)調(diào)用,返回非null Optional對(duì)象 | |
orElse | T | T | 如果有值則將其返回,否則返回一個(gè)默認(rèn)值 | |
orElseGet | Supplier<? extends T> | T | 如果有值則將其返回,否則返回一個(gè)由指定的Supplier接口生成的值 | |
orElseThrow | Supplier<? extends X> | <X extends Throwable> | 如果有值則將其返回,否則拋出一個(gè)由指定的Supplier接口生成的異常 |
相關(guān)文章
一文教你如何通過三級(jí)緩存解決Spring循環(huán)依賴
這篇文章主要介紹了如何通過三級(jí)緩存解決?Spring?循環(huán)依賴,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考價(jià)值,需要的朋友可以參考下2023-07-07Java優(yōu)化for循環(huán)嵌套的高效率方法
這篇文章主要介紹了Java優(yōu)化for循環(huán)嵌套的高效率方法,幫助大家更好的提升java程序性能,感興趣的朋友可以了解下2020-09-09SpringBootWeb?入門了解?Swagger?的具體使用
這篇文章主要介紹了SpringBootWeb?入門了解?Swagger?的具體使用,Swagger?框架可以根據(jù)已經(jīng)實(shí)現(xiàn)的方法或者類,通過頁(yè)面的方式直觀清晰的查看或者進(jìn)行測(cè)試該方法,需要的朋友可以參考下2024-08-08IDEA中application.properties的圖標(biāo)顯示不正常的問題及解決方法
這篇文章主要介紹了IDEA中application.properties的圖標(biāo)顯示不正常的問題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04