objects jdk8_JDK 9:NotNullOrElse方法已添加到Objects类
objects jdk8
JDK 9向Objects類添加了一些新方法,包括本文中突出顯示的兩個static方法: requireNonNullElse(T,T)和requireNonNullElseGet(T obj,Supplier <?extended T>供應商) 。 這兩種方法使得更容易驗證給定的對象是不 null ,并且如果提供可變原來是提供一種替代的null 。 因此,這些方法和早期JDK版本中引入到Objects的相似方法[ requireNonNull(T) , requireNonNull(T,String)和requireNonNull(T,Supplier <String>) ]最有可能用于在方法中實現保護子句 。
當確定要測試的對象為null時,在JDK 9之前添加到Objects的最后一段中提到的三種方法不允許使用“默認”值。 相反,當傳遞給它們的變量為null時,這三個方法中的每一個都會引發NullPointerException 。 在JDK 9中添加到Objects的兩個方法確實允許指定一個默認值,該默認值可以由該方法返回,而不是該方法拋出NullPointerException 。
Objects.requireNonNullElse(T,T)是兩個新添加的方法中最直接的方法,用于指定當所測試的變量為null時要返回的默認對象。 下一個代碼清單中顯示了應用此方法的示例。
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 ,則返回提供的默認值“ now”(基于調用不接受參數的Date構造函數 )。
JDK 9還添加了Objects.requireNonNullElseGet(T,Supplier <?extended T>)方法用于類似目的。 該方法與前面討論的方法的不同之處在于,它接受提供默認值的供應商 ,而不是接受相同類型的另一個對象作為默認值。
Ken Kousen在強烈推薦的《 現代Java食譜 》一書中寫道:“ Supplier的主要用例之一是支持延遲執行的概念。” 在討論了Supplier在JDK中的用法之后,他補充說:“可以在您自己的代碼中使用此延遲執行過程,以確保僅在適當時才從Supplier檢索值。” 我的下一個示例演示了這一點。
下面顯示了一個高度人為的代碼清單,并演示了此方法接受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(); }當用于確定默認值的代碼預期長時間運行時,接受Supplier的方法的版本可能是有利的。 在這種情況下,僅當第一個傳入的參數為null時才執行長時間運行的方法。 當第一個傳入的參數不為 null ,不會調用長時間運行的方法。 [順便說一句,我在這里沒有顯示calculateDate()的實現,因為它是可笑的,但是可以說它有意地花費很長時間來執行。
覆蓋在這個崗位,這兩種方法可以很容易地檢測一個特定的變量為null ,并代替它提供了一個合適的替代品時,它是null 。 這些可能最常用于實現“保護條款”,但是它們返回默認值的能力也可能導致其他用例。
翻譯自: https://www.javacodegeeks.com/2018/02/jdk-9-notnullorelse-methods-added-objects-class.html
objects jdk8
總結
以上是生活随笔為你收集整理的objects jdk8_JDK 9:NotNullOrElse方法已添加到Objects类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 夕阳唯美电脑主题(夕阳电脑壁纸高清)
- 下一篇: java程序设置jvm_Java程序员应