



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第Java中的Optional處理方法目錄java.util.Optional使用Optional構建對象獲取Optional中的對象Optional中map和flatmap的差別在我們?nèi)粘5拈_發(fā)中,我們經(jīng)常會遇到NullPointerException。如何才能優(yōu)雅的處理NPE?這里告訴大家一個較為流行的方法
java.util.Optional
使用Optional來修飾對象,表示這個對象可能為null。在使用時,就要加以注意,必須要考慮該值為null的場景。
使用Optional構建對象
//創(chuàng)建一個空的car
OptionalCarcar=Optional.empty();
//使用of創(chuàng)建,of的值一定不能是null,否則賦值階段就報NullPointerException
*if(obj==null)
*thrownewNullPointerException();
Carcar1=newCar();
OptionalCarocar1=Optional.of(car1);
//創(chuàng)建一個可以為null的Optional,該方法支持car為null,但是會在用到car的地方拋出異常,但不是空指針異常。
Carcar2=newCar();
OptionalCarocar2=Optional.ofNullable(car2);
System.out.println(ocar2.get());
OptionalCarocar22=Optional.ofNullable(null);
獲取Optional中的對象
1.get:這是最不安全的方法。如果變量存在就返回,不存在的話則會拋出NoSuchElementException的異常。所以,get()的使用場景一定是十分確定Optional修飾的值一定是有內(nèi)容的,否則不建議使用。
/**
*publicTget(){
*if(value==null){
*thrownewNoSuchElementException("Novaluepresent");
*returnvalue;
Stringname=car.getInsurance().get().getName();
System.out.println(name);
2.orElse:作用和get一樣,但是沒有值時可以使用默認值
/**
*publicTorElse(Tother){
*returnvalue!=nullvalue:other;
StringorName=car.getInsurance().orElse(newInsurance()).getName();
System.out.println(orName);
3.orElseGet:orElse的延時版本。只有當val為空時,才會創(chuàng)建defleatvalue
/**
*publicTorElseGet(SupplierextendsTsupplier){
*returnvalue!=nullvalue:supplier.get();
StringgetElseName=car.getInsurance().orElseGet(Insurance::new).getName();
System.out.println("getElseName"+getElseName);
4.orElseThrow:和orElse類似,只是當value不存在時拋出異常
publicTorElseThrow(){
if(value==null){
thrownewNoSuchElementException("Novaluepresent");
returnvalue;
}
5.ifPresent:判斷值存在之后再操作,不存在就不操作
/**
*publicvoidifPresent(ConsumersuperTaction){
*if(value!=null){
*action.accept(value);
car.getInsurance().ifPresent(ins-{
Stringpname=ins.getName();
System.out.println("inPresent"+pname);
});
Optional中map和flatmap的差別
OptionalOptionalCarmCar=optionalPerson.map(Person::getCar);
OptionalCarflatMapCap=optionalPerson.flatMap(Person::getCar);
map
publicUOptionalUmap(FunctionsuperT,extendsUmapper){
Objects.requireNonNull(mapper);
if(!isPresent()){
returnempty();
}else{
//返回值使用Optional包裝
returnOptional.ofNullable(mapper.apply(value));
}
flatMap
publicUOptionalUflatMap(FunctionsuperT,extendsOptionalextendsUmapper){
Objects.requireNonNull(mapper);
if(!isPresent()){
returnempty();
}else{
@SuppressWarnings("unch
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年西班牙語DELEA1級口語實戰(zhàn)試卷:基礎口語與聽力同步
- 爺爺?shù)淖孕熊囎魑?1篇范文
- 一場激烈的辯論賽發(fā)言稿演講稿13篇
- 生活的強者蜘蛛450字15篇范文
- 三只啄木鳥800字(13篇)
- 一件有意義的小事記事實文突出小事中的大道理5篇范文
- 學習演講的經(jīng)歷演講稿分享作文(11篇)
- 小狗與友誼寫物作文(11篇)
- 上冊第七單元寫信作文(15篇)
- 我的語文老師畫像記(9篇)
- 廣東省深圳市羅湖區(qū)2022-2023學年六年級下學期7月期末科學試題(掃描版無答案)
- 重大虧損項目減虧扭虧專項聯(lián)動包保考核實施辦法
- 催化氫化催化劑
- 光纖跳線生產(chǎn)技術工藝流程
- TCVN-2622-越南建筑防火規(guī)范(中文版)
- JJG 648-2017非連續(xù)累計自動衡器(累計料斗秤)
- JJF 1376-2012箱式電阻爐校準規(guī)范
- GB/T 5211.20-1999在本色體系中白色、黑色和著色顏料顏色的比較色度法
- GB/T 13610-2020天然氣的組成分析氣相色譜法
- FZ/T 54032-2010潔凈高白度粘膠短纖維
- 黨章黨史知識競賽題庫及答案
評論
0/150
提交評論