



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第Java中的Optional處理方法目錄java.util.Optional使用Optional構(gòu)建對象獲取Optional中的對象Optional中map和flatmap的差別在我們?nèi)粘5拈_發(fā)中,我們經(jīng)常會遇到NullPointerException。如何才能優(yōu)雅的處理NPE?這里告訴大家一個較為流行的方法
java.util.Optional
使用Optional來修飾對象,表示這個對象可能為null。在使用時,就要加以注意,必須要考慮該值為null的場景。
使用Optional構(gòu)建對象
//創(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一樣,但是沒有值時可以使用默認(rèn)值
/**
*publicTorElse(Tother){
*returnvalue!=nullvalue:other;
StringorName=car.getInsurance().orElse(newInsurance()).getName();
System.out.println(orName);
3.orElseGet:orElse的延時版本。只有當(dāng)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類似,只是當(dāng)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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 仿制產(chǎn)品合同范例
- 審計師考試實戰(zhàn)經(jīng)驗總結(jié)及試題與答案
- 信息安全保密協(xié)議合同范例
- 個人租地合同范例簡易
- 買本田新車合同范例
- 公司租個人車合同范例
- 企業(yè)影視廣告代理合同范例
- 代銷售合同范例
- 假胎生子 合同范例
- 2025年入團考試復(fù)習(xí)教材試題及答案
- 智利國家介紹
- 材料力學(xué)答案第四版單輝祖課后答案
- NB/T 10742-2021智能化綜采工作面設(shè)計規(guī)范
- YY/T 1226-2022人乳頭瘤病毒核酸(分型)檢測試劑盒
- GB/T 5053.1-1985汽車與掛車之間24N型電連接器
- GB/T 21709.13-2013針灸技術(shù)操作規(guī)范第13部分:芒針
- GB/T 1723-1993涂料粘度測定法
- 全員安全生產(chǎn)意識提升教育培訓(xùn)
- Z3050搖臂鉆床殼體蓋機加工工藝及夾具設(shè)計
- 農(nóng)民專業(yè)合作社賬務(wù)處理實務(wù)-最合理最全面
- 傳統(tǒng)養(yǎng)生課程標(biāo)準(zhǔn)
評論
0/150
提交評論