国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

貓頭鷹的深夜翻譯:JDK9 NotNullOrElse方法

jone5679 / 2035人閱讀

摘要:在之前加入的三個方法并不支持在對象為空時返回一個默認值。取而代之的是,這三個方法會拋出。中新加入的兩個方法則會在傳入值為時返回一個默認值。還加了一個有相同功能的方法。當(dāng)傳入的第一個參數(shù)不是時,該方法將不會被調(diào)用。

前言

本篇文章重點討論JDK9中添加的靜態(tài)方法,requireNonNullElserequireNonNullElseGet

正文

JDK9在Object類中新添加了兩個靜態(tài)方法,requreNonNullElse(T, T) requireNonNullElseGet(T obj,Supplier supplier)。這兩個方法簡化了判斷對象是否為空(null),如果是空的則返回一個默認值。因此,這兩個方法和早期JDK版本中引入的方法requireNonNull(T),requireNonNull(T,String)requireNonNull(T,Supplier)可以用來進行防御性編程。

在JDK9之前加入的三個方法并不支持在對象為空時返回一個默認值。取而代之的是,這三個方法會拋出NullPointerException。JDK9中新加入的兩個方法則會在傳入值為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();
}

在上面的例子中,如果提供的參數(shù)對象inputDate為null的話,默認值nownew Date()構(gòu)造函數(shù)返回當(dāng)前的時間)將會作為默認值返回。

JDK9還加了一個有相同功能的Objects.requireNonNullElseGet(T,Supplier)方法。這個方法和上一個方法的區(qū)別是,它接收一個Supplier對象來提供默認值,而不是直接返回一個同類型的對象作為默認值。

Modern Java Recipes, Ken Kousen 這本書中寫道:Supplier S的基本用途之一就是支持延遲執(zhí)行。在討論了如何使用JDK中的Supplier之后,他還補充了:可以在代碼中使用延遲執(zhí)行,從而確保只有在時機合適時才會從Supplier處獲取值。

下面展示了該方法的使用:

/**
 * 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)獲取默認值的過程預(yù)計會運行較常時間時,傳入一個Supplier作為獲取默認值的方法會很有優(yōu)勢。這時,只有當(dāng)傳入的第一個參數(shù)為null時才會執(zhí)行該方法。當(dāng)傳入的第一個參數(shù)不是null時,該方法將不會被調(diào)用。

本文中提到的兩個方法簡化了判斷一個參數(shù)是否為null并在為null時返回一個默認值的過程。它們最長用來實現(xiàn)防御性編程,當(dāng)然也有其他的應(yīng)用場景。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/68490.html

相關(guān)文章

  • 頭鷹深夜翻譯:在JVM上根據(jù)合約編程

    摘要:前言這周我準備介紹一個有趣的但是很少使用的方法按照合約編程,又稱為合約編程,是一種軟件設(shè)計的方法。這些規(guī)則被稱為合約,可以比擬為商業(yè)合同中的條件和義務(wù)。通過將檢查和異常拋出指令包裝到方法中,人們可以很容易地實現(xiàn)合約式編程。 前言 這周我準備介紹一個有趣的但是很少使用的方法 按照合約編程,又稱為合約編程,是一種軟件設(shè)計的方法。它規(guī)定了軟件設(shè)計師應(yīng)該為軟件組件定義正式,精確和可驗證的接口規(guī)...

    whatsns 評論0 收藏0
  • 頭鷹深夜翻譯:Java WeakHashMap

    摘要:本文簡介類概覽類構(gòu)造器總結(jié)類構(gòu)造方法類使用舉例類概覽是一個實現(xiàn)了接口,并且鍵為型的哈希表。中的條目不再被正常使用時,會被自動刪除。它的鍵值均支持。和絕大多數(shù)的集合類一樣,這個類不是同步的。 本文簡介 WeakHashMap類概覽 WeakHashMap類構(gòu)造器總結(jié) WeakHashMap類構(gòu)造方法 WeakHasjMap類使用舉例 1. WeakHashMap類概覽 Wea...

    BothEyes1993 評論0 收藏0
  • 頭鷹深夜翻譯:請不要把它叫做Restful!

    摘要:因此,誤解幾乎是與之俱來的。這是完全錯誤的。就像所強調(diào)的,對于一個被稱作的來說,狀態(tài)轉(zhuǎn)移管理是一個必須要完成的需求。你可以將其稱為或是,但是請不要把它叫做。 2000年的時候,Douglas Crockford聲明JavaScript是最被誤解的編程語言。這種誤解來源于不良的命名規(guī)范,錯誤設(shè)計,非標準模式等等。因此,誤解幾乎是與之俱來的。 我也在關(guān)于Restful架構(gòu)上發(fā)表了一個相似的...

    dadong 評論0 收藏0
  • 頭鷹深夜翻譯:Java中CAS(Compare And Swap)

    摘要:否則它就會用新的值替代當(dāng)前值。在這種情況下,鎖可能會優(yōu)于原子變量,但在實際的爭用級別中,原子變量的性能優(yōu)于鎖。在中引入了另外一個構(gòu)件。 題目要求 在我們深入了解CAS(Compare And Swap)策略以及它是如何在AtomicInteger這樣的原子構(gòu)造器中使用的,首先來看一下這段代碼: public class MyApp { private volatile int ...

    hosition 評論0 收藏0
  • 頭鷹深夜翻譯:分布式系統(tǒng)Toolkit模式

    摘要:根本上來說,這意味著不僅要將整個應(yīng)用程序分解,而且要將任何一個服務(wù)器中的各個部分分解為多個模塊化容器,這些容器易于參數(shù)化和重復(fù)使用。在中,這種模塊化容器服務(wù)的實施者是。一個是指一組共享文件系統(tǒng),內(nèi)核命名空間和地址的一組容器。 過去幾年容器逐漸成為了打包和部署代碼的流行的方式。容器鏡像解決很多現(xiàn)有的打包和部署工具所帶來的問題,初次以外,還為我們提供了構(gòu)建分布式應(yīng)用的全新的思路。就如SOA...

    hiyayiji 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<