歡迎訪問昆山寶鼎軟件有限公司網站! 設為首頁 | 網站地圖 | XML | RSS訂閱 | 寶鼎郵箱 | 后臺管理
?

新聞資訊

MENU

軟件開發知識

雖然沒有直接提供 昆山軟件開發 一個操作符寫起來短

點擊: 次  來源:寶鼎軟件 時間:2017-08-02

原文出處: kaaass

Optional是Java8提供的為了辦理null安詳問題的一個API。善用Optional可以使我們代碼中許多繁瑣、丑惡的設計變得十分優雅。這篇文章是成立在你對Optional的用法有必然相識的基本上的,假如你還不太相識Optional,可以先去看看相關教程,可能查閱Java文檔。

利用Optional,我們就可以把下面這樣的代碼舉辦改寫。

public static String getName(User u) {
    if (u == null)
        return "Unknown";
    return u.name;
}

不外,軟件開發,軟件開發,千萬不要改寫成這副樣子。

public static String getName(User u) {
    Optional<User> user = Optional.ofNullable(u);
    if (!user.isPresent())
        return "Unknown";
    return user.get().name;
}

這樣改寫非但不簡捷,并且其操縱照舊和第一段代碼一樣。無非就是用isPresent要領來替代u==null。這樣的改寫并不是Optional正確的用法,我們再來改寫一次。

public static String getName(User u) {
    return Optional.ofNullable(u)
                    .map(user->user.name)
                    .orElse("Unknown");
}

這樣才是正確利用Optional的姿勢。那么憑據這種思路,軟件開發,我們可以定心的舉辦鏈式挪用,而不是一層層判定了??匆欢未a:

public static String getChampionName(Competition comp) throws IllegalArgumentException {
    if (comp != null) {
        CompResult result = comp.getResult();
        if (result != null) {
            User champion = result.getChampion();
            if (champion != null) {
                return champion.getName();
            }
        }
    }
    throw new IllegalArgumentException("The value of param comp isn't available.");
}

由于各種原因(好比:角逐還沒有發生冠軍、要領的非正常挪用、某個要領的實現里埋藏的大禮包等等),我們并不能開心的一路comp.getResult().getChampion().getName()到底。而其他語言好比kotlin,就提供了在語法層面的操縱符加持:comp?.getResult()?.getChampion()?.getName()。所以講原理在Java里我們怎么辦!

讓我們看看顛末Optional加持事后,這些代碼會釀成什么樣子。

public static String getChampionName(Competition comp) throws IllegalArgumentException {
    return Optional.ofNullable(comp)
            .map(c->c.getResult())
            .map(r->r.getChampion())
            .map(u->u.getName())
            .orElseThrow(()->new IllegalArgumentException("The value of param comp isn't available."));
}

這就很舒服了。Optional給了我們一個真正優雅的Java氣勢氣魄的要領來辦理null安詳問題。固然沒有直接提供一個操縱符寫起來短,可是代碼看起來依然很爽很舒服。更況且?.這樣的語法好欠悅目還見仁見智呢。

尚有許多不錯的利用姿勢,好比為空則不打印可以這么寫:

string.ifPresent(System.out::println);

Optional的魅力還不止于此,Optional尚有一些神奇的用法,好比Optional可以用來檢討參數的正當性。

public void setName(String name) throws IllegalArgumentException {
    this.name = Optional.ofNullable(name).filter(User::isNameValid)
                        .orElseThrow(()->new IllegalArgumentException("Invalid username."));
}

這樣寫參數正當性檢測,應該足夠優雅了吧。

參考資料

  • 利用 Java8 Optional 的正確姿勢 – 隔葉黃鶯 Unmi Blog (https://unmi.cc/proper-ways-of-using-java8-optional/)
  • 排列三305组选前后关系 6 1开奖结果查询浙江 宁夏十一选五彩票平台 排列5开奖直播 江西快三玩法中奖介绍 江苏快3软件 云天华成配资 天津11选5走势图基本 内蒙古11选55开奖结果 汇盈盘 贵州11选5组三走势图