Java中的Optional處理方法_第1頁
Java中的Optional處理方法_第2頁
Java中的Optional處理方法_第3頁
Java中的Optional處理方法_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論