欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

快速掌握J(rèn)ava8中的Optional

 更新時(shí)間:2023年07月13日 11:51:10   作者:偏愛(ài)星霧纏繞15  
Optional 是一個(gè)容器類,代表一個(gè)值存在或不存在,Optional并不是用來(lái)替換所有的null,而是為了在設(shè)計(jì)良好的API中更明確地表達(dá)可能缺失的值,這篇文章主要介紹了Java8的Optional及使用,需要的朋友可以參考下

自從Java 8在2014年發(fā)布以來(lái),它引入了很多有用的特性,其中之一就是Optional類。這個(gè)類被設(shè)計(jì)成Java語(yǔ)言的一個(gè)解決方案,用于解決空指針異常(NullPointerException),這是Java開(kāi)發(fā)者們面臨的常見(jiàn)問(wèn)題之一。在這篇博客中,我們將深入探討Java的Optional。

什么是 Optional?

Optional 是一個(gè)容器類,代表一個(gè)值存在或不存在。原始版本的Java沒(méi)有空安全的類型,這意味著任何東西都可能是null,而這經(jīng)常會(huì)導(dǎo)致NullPointerException。因此,Optional的出現(xiàn)使得我們可以更優(yōu)雅地處理可能為null的情況。

如何使用Optional?

創(chuàng)建Optional對(duì)象

創(chuàng)建一個(gè)非空的Optional

// 使用of方法創(chuàng)建包含值的Optional。參數(shù)不能為null,否則會(huì)立即拋出NullPointerException。
Optional<String> optional = Optional.of("Hello World");

創(chuàng)建一個(gè)可能為空的Optional

// 使用ofNullable方法創(chuàng)建可以包含null的Optional。如果參數(shù)為null,它將創(chuàng)建一個(gè)空的Optional對(duì)象。
Optional<String> optionalNullable = Optional.ofNullable(null);

訪問(wèn)Optional對(duì)象的值

使用get()方法來(lái)獲取Optional的值,如果Optional為空則拋出NoSuchElementException異常:

String value = optional.get();

使用isPresent()方法來(lái)檢查Optional是否有值:

// isPresent方法用于檢查Optional實(shí)例中是否包含非null值。
if (optional.isPresent()) {
    System.out.println("Value found - " + optional.get());
}

使用ifPresent()方法進(jìn)行更優(yōu)雅的檢查和使用:

// ifPresent方法接收一個(gè)Consumer(消費(fèi)者)參數(shù),僅當(dāng)Optional中有值存在時(shí),才執(zhí)行傳入的lambda表達(dá)式(或方法引用)。
optional.ifPresent(value -> System.out.println("Value found - " + value));

如果你想在Optional為空的時(shí)候提供一個(gè)備用值,你可以使用orElse()方法:

 
// orElse方法允許在Optional對(duì)象不包含值時(shí)提供一個(gè)備選值。
String nullDefault = optionalNullable.orElse("Default Value");
System.out.println(nullDefault); // 輸出:Default Value

或者使用orElseGet()方法進(jìn)行延遲計(jì)算備用值:

String value = optional.orElseGet(() -> "default value");

鏈?zhǔn)秸{(diào)用Optional

Optional還支持鏈?zhǔn)椒椒ㄕ{(diào)用,如mapflatMap,這使得它能夠和Java 8的其他特性如Streamlambda表達(dá)式一起更好地工作:

map 和 flatMap

mapflatMap 方法在函數(shù)式編程中用得非常廣泛,它們也在Optional中被定義:

// 假設(shè)有一個(gè)方法parse(String str),str可能為null,解析后的結(jié)果也可能為null
Optional<String> str = Optional.ofNullable(getStr());
// 不使用map,我們需要進(jìn)行兩次null檢查
if(str != null){
    String result = parse(str);
    if(result != null){
        System.out.println(result);
    }
}
// 使用Optional和map,可以避免顯示null檢查
str.map(this::parse).ifPresent(System.out::println);

注意,map操作需要Function作為參數(shù),所以你的方法不能返回Optional類型。如果你要返回Optional,你應(yīng)該使用flatMap,否則你會(huì)得到套裝的Optional:

// 使用map,你會(huì)得到Optional<Optional<Integer>>
Optional<Optional<Integer>> nestedOptional = str.map(this::parseToOptional);
// 使用flatMap,你會(huì)得到Optional<Integer>
Optional<Integer> flatOptional = str.flatMap(this::parseToOptional);

filter

filter方法與Stream中的filter類似,它接收Predicate參數(shù),用于測(cè)試Optional中是否有值符合給定的條件:

Optional<String> filtered = str.filter(val -> val.length() > 3);
// 如果Optional中的值長(zhǎng)度大于3,那么仍舊返回包含該值的Optional
// 否則返回一個(gè)空的Optional實(shí)例

總結(jié)起來(lái),Optional并不是用來(lái)替換所有的null,而是為了在設(shè)計(jì)良好的API中更明確地表達(dá)可能缺失的值。通過(guò)明晰地表示"值可能不存在",Optional可以幫助我們?cè)O(shè)計(jì)更清晰、更易于理解的API,從而減少Bug的出現(xiàn)率。

到此這篇關(guān)于Java8的Optional的文章就介紹到這了,更多相關(guān)Java8的Optional內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論