本篇內容主要講解“如何正確使用Optional解決null安全問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何正確使用Optional解決null安全問題”吧!
創新互聯建站2013年開創至今,先為雨湖等服務建站,雨湖等地企業,進行企業商務咨詢服務。為雨湖企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
使用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的姿勢。那么按照這種思路,我們可以安心的進行鏈式調用,而不是一層層判斷了。看一段代碼:
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."));
}
這樣寫參數合法性檢測,應該足夠優雅了吧。
到此,相信大家對“如何正確使用Optional解決null安全問題”有了更深的了解,不妨來實際操作一番吧!這里是創新互聯網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
標題名稱:如何正確使用Optional解決null安全問題
分享路徑:http://vcdvsql.cn/article8/pcdhop.html
成都網站建設公司_創新互聯,為您提供網站內鏈、做網站、用戶體驗、定制開發、品牌網站建設、外貿網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯