日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

objects jdk8_JDK 9:NotNullOrElse方法已添加到Objects类

發(fā)布時間:2023/12/3 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 objects jdk8_JDK 9:NotNullOrElse方法已添加到Objects类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

objects jdk8

JDK 9向Objects類添加了一些新方法,包括本文中突出顯示的兩個static方法: requireNonNullElse(T,T)和requireNonNullElseGet(T obj,Supplier <?extended T>供應(yīng)商) 。 這兩種方法使得更容易驗(yàn)證給定的對象是不 null ,并且如果提供可變原來是提供一種替代的null 。 因此,這些方法和早期JDK版本中引入到Objects的相似方法[ requireNonNull(T) , requireNonNull(T,String)和requireNonNull(T,Supplier <String>) ]最有可能用于在方法中實(shí)現(xiàn)保護(hù)子句 。

當(dāng)確定要測試的對象為null時,在JDK 9之前添加到Objects的最后一段中提到的三種方法不允許使用“默認(rèn)”值。 相反,當(dāng)傳遞給它們的變量為null時,這三個方法中的每一個都會引發(fā)NullPointerException 。 在JDK 9中添加到Objects的兩個方法確實(shí)允許指定一個默認(rèn)值,該默認(rèn)值可以由該方法返回,而不是該方法拋出NullPointerException 。

Objects.requireNonNullElse(T,T)是兩個新添加的方法中最直接的方法,用于指定當(dāng)所測試的變量為null時要返回的默認(rèn)對象。 下一個代碼清單中顯示了應(yīng)用此方法的示例。

Objects.requireNonNullElse?(T,T)示例

/*** Provide instance of {@code Instant} that corresponds to* the provided instance of {@code Date}.** @param inputDate Instance of {@code Date} for which* corresponding instance of {@code Instant} is desired;* if this is {@code null}, an {@code Instant} representing* "now" will be returned.* @return Instance of {@code Instant} extracted from provided* {@Date} that will instead represent "now" if provided* {@code Date} is {@code null}.*/ public Instant convertDateToInstantWithNowDefault(final Date inputDate) {final Date dateToConvert= Objects.requireNonNullElse(inputDate, new Date());return dateToConvert.toInstant(); }

在上面的示例中,如果提供的Date類型的變量為null ,則返回提供的默認(rèn)值“ now”(基于調(diào)用不接受參數(shù)的Date構(gòu)造函數(shù) )。

JDK 9還添加了Objects.requireNonNullElseGet(T,Supplier <?extended T>)方法用于類似目的。 該方法與前面討論的方法的不同之處在于,它接受提供默認(rèn)值的供應(yīng)商 ,而不是接受相同類型的另一個對象作為默認(rèn)值。

Ken Kousen在強(qiáng)烈推薦的《 現(xiàn)代Java食譜 》一書中寫道:“ Supplier的主要用例之一是支持延遲執(zhí)行的概念。” 在討論了Supplier在JDK中的用法之后,他補(bǔ)充說:“可以在您自己的代碼中使用此延遲執(zhí)行過程,以確保僅在適當(dāng)時才從Supplier檢索值。” 我的下一個示例演示了這一點(diǎn)。

下面顯示了一個高度人為的代碼清單,并演示了此方法接受Supplier 。

Objects.requireNonNullElseGet?(T,Supplier<? extends T>)示例

/*** Provide instance of {@code Instant} that corresponds to* the provided instance of {@code Date}.** @param inputDate Instance of {@code Date} for which* corresponding instance of {@code Instant} is desired;* if this is {@code null}, an {@code Instant} based on* a complicated date calculation will be returned.* @return Instance of {@code Instant} extracted from provided* {@Date} that will instead represent a calculated date if* provided {@code Date} is {@code null}.*/ public Instant convertDateToInstantWithCalculatedDefault(final Date inputDate) {final Date dateToConvert= Objects.requireNonNullElseGet(inputDate, () -> calculateDate());return dateToConvert.toInstant(); }

當(dāng)用于確定默認(rèn)值的代碼預(yù)期長時間運(yùn)行時,接受Supplier的方法的版本可能是有利的。 在這種情況下,僅當(dāng)?shù)谝粋€傳入的參數(shù)為null時才執(zhí)行長時間運(yùn)行的方法。 當(dāng)?shù)谝粋€傳入的參數(shù)不為 null ,不會調(diào)用長時間運(yùn)行的方法。 [順便說一句,我在這里沒有顯示calculateDate()的實(shí)現(xiàn),因?yàn)樗强尚Φ?#xff0c;但是可以說它有意地花費(fèi)很長時間來執(zhí)行。

覆蓋在這個崗位,這兩種方法可以很容易地檢測一個特定的變量為null ,并代替它提供了一個合適的替代品時,它是null 。 這些可能最常用于實(shí)現(xiàn)“保護(hù)條款”,但是它們返回默認(rèn)值的能力也可能導(dǎo)致其他用例。

翻譯自: https://www.javacodegeeks.com/2018/02/jdk-9-notnullorelse-methods-added-objects-class.html

objects jdk8

總結(jié)

以上是生活随笔為你收集整理的objects jdk8_JDK 9:NotNullOrElse方法已添加到Objects类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。