中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java的Optional能補充所有傳統的if-null-else或if-not-null-else嗎

發布時間:2022-02-28 10:48:38 來源:億速云 閱讀:147 作者:iii 欄目:開發技術

今天小編給大家分享一下Java的Optional能補充所有傳統的if-null-else或if-not-null-else嗎的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

Java 添加的java.util.Optional非常的受歡迎,并為總是不能返回非null值的方法提供了更流暢的代碼。很不幸的是,Optional已被濫用,一種濫用,甚至已被過度使用。當與直接使用相比null沒有明顯優勢時,我偶爾會遇到使用Optional的代碼。

當 Optional 與直接檢查 null 相比沒有任何優勢,調用代碼對它剛剛調用的方法的返回值使用Optional.ofNullable(T)時,可能會提示一個危險信號。如同所有的“危險信號”,這并不意味著將方法將返回值傳遞個Optional.ofNullable(T)(事實上,傳遞給期望 Optional 的 API 是必要的),但它的這種做法通常是用于不提供實際值,而不是直接使用返回值并檢查它的是否為 null。

在 Optional 可用之前,用于檢查 null 方法返回的代碼以及對 null 響應采取一種方式和對非 null 響應采取另一種方式的代碼如下所示)。

/**
 * Demonstrates approach to conditional based on {@code null} or
 * not {@code null} that is traditional pre-{@link Optional} approach.
 */
public void demonstrateWithoutOptional()
{
    final Object returnObject = methodPotentiallyReturningNull();
    if (returnObject == null)
    {
        out.println("The returned Object is null.");
    }
    else
    {
        out.println("The returned object is NOT null: " + returnObject);
        // code processing non-null return object goes here ...
    }
}

對于這個基本條件,很少需要涉及Optional。下一個代碼片段代表了我在開發人員嘗試使用Optional替換顯式空檢測時偶爾看到的代碼類型:

/**
 * Demonstrates using {@link Optional} in exactly the manner {@code null}
 * is often used (conditional on whether the returned value is empty or
 * not versus on whether the returned value is {@code null} or not).
 */
public void demonstrateOptionalUsedLikeNullUsed()
{
    final Optional<Object> optionalReturn
       = Optional.ofNullable(methodPotentiallyReturningNull());
    if (optionalReturn.isEmpty())
    {
        out.println("The returned Object is empty.");
    }
    else
    {
        out.println("The returned Object is NOT empty: " + optionalReturn);
        // code processing non-null return object goes here ...
    }
}

此代碼中的范式與傳統的null檢查代碼基本相同,但使用Optional.isEmpty()執行相同的檢查。這種方法不會增加任何可讀性或其他優勢,但確實以額外的對象實例化和方法調用為代價。

上述用法的一個變體Optional是將其ifPresent(Consumer)方法與其isEmpty()方法結合使用,形成相同的基本邏輯,如果返回值存在則做一件事,如果返回值為空則做另一件事。這在以下代碼中進行了演示。

/**
 * Demonstrates using {@link Optional} methods {@link Optional#ifPresent(Consumer)}
 * and {@link Optional#isEmpty()} in similar manner to traditional condition based
 * on {@code null} or not {@code null}.
 */
public void demonstrateOptionalIfPresentAndIsEmpty()
{
    final Optional<Object> optionalReturn
       = Optional.ofNullable(methodPotentiallyReturningNull());
    optionalReturn.ifPresent(
       (it) -> out.println("The returned Object is NOT empty: " + it));
    if (optionalReturn.isEmpty())
    {
        out.println("The returned object is empty.");
    }
}

這段代碼看起來比直接檢查 的返回值的傳統方法要短一些null,但仍然以額外的對象實例化為代價,并且需要兩次方法調用。此外,首先檢查 Optional 是否存在然后立即檢查它是否為空感覺有點奇怪。此外,如果需要執行的邏輯比將消息寫到標準輸出更復雜,這種方法就變得不那么實用了。

以上就是“Java的Optional能補充所有傳統的if-null-else或if-not-null-else嗎”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

垣曲县| 承德县| 阿鲁科尔沁旗| 花莲县| 五河县| 昌吉市| 大同县| 松原市| 宁武县| 大兴区| 合阳县| 凉城县| 和硕县| 孝昌县| 榆树市| 公安县| 佛坪县| 佳木斯市| 昌都县| 黄冈市| 九龙县| 富阳市| 耿马| 新昌县| 武宁县| 阳山县| 金沙县| 石柱| 昔阳县| 沂源县| 临武县| 满洲里市| 上饶市| 莱阳市| 江阴市| 海门市| 齐齐哈尔市| 靖安县| 磐石市| 教育| 万山特区|