如何降低NPE

本篇文章為大家展示了如何降低NPE,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

成都創新互聯公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:做網站、成都做網站、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的沁水網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

如何降低NPE

程序員,如果系統突然報了一個空指針異常,你肯定像吞了一只蒼蠅一樣尷尬。

那么如何在日常開發過程中降低NPE?

問題回答
現狀返回空值會出現大量的空指針異常
目的改進方法的返回值,降低出現空指針異常
實現路徑方法返回空集合或者空數組

跟我來!

背景

下面的方法看起來很常見。

private final List<Chesse> chessesInStock= ...

public List<Cheese> getCheeses(){
	return cheesesInStock.isEmpty()?null:new ArrayList<>(cheesesInStock);
}

假如你去購買芝士的時候沒有可用的芝士,似乎沒有理由特別指出這種場景。

但是你這么做的話,客戶端需要添加額外代碼來處理可能返回空值的情況。示例代碼如下:

List<Cheese> cheeses = shop.getCheeses();

if(cheses != null && cheeses.contains(Cheese.STILTON)){
	System.out.println("jolly good");
}

每一個返回空值的方法都使用上面這種處理方式,應該替換為返回一個空集合或者空數組。

這是一種錯誤的趨勢,因為程序員些客戶端代碼可能會忘記寫特殊代碼來處理返回的空值。

這個錯誤可能會持續很長時間,因為這樣的方法通常會返回一個或多個對象。

不返回空集合空數組的爭論

返回空值替換為返回空容器也會使得方法的實現變得復雜。

通常爭論的是:返回空值比返回空集合更好是因為創建一個空的容器有性能消耗。

這個論點不對,原因有兩點:

一,沒有必要擔心性能除非有證據顯示創建一個空容器整的有損性能;

二,你可以返回一個空集合或者數組而不用創建它們。

返回空集合

下面是一個典型的代碼返回一個可能的空集合,通常,這就是你所需要的。

public List<Cheese> getCheeses(){
	return new ArrayList<>(cheeseInStock);
}

沒有證據證明創建一個空集合會有損性能,你可以返回一個相同的不可變空集合來避免創建空集合。因為不可變對象是可以被自由共享的,下面是使用代碼。

需求場景代碼
空ListCollections.emptyList()
空SetCollections.emptySet()
空MapCollections.emptyMap()

但是記住,以上這些操作是只是優化,很少被調用,如果你認為你需要它,在調用前后進行性能對比,確保它真的有用。

public List<Cheese> getCheeses(){
	return cheesesInStock.isEmpty()?Collections.emptyList():new ArrayList<>(cheesesInStock);
}

返回空數組

使用數組的場景跟集合是相同的,永遠不要返回空值,應該返回一個長度位0的數組,常常,你應該簡單的返回一個有適當長度的數組,也許長度是0。

注意我們傳遞一個長度為0的數組到toArray方法中來代表期望的返回類型;

public Cheese[] getCheeses(){
	return cheesesInStock.toArray(new Cheese[0]);
}

如果你認為創建一個長度為0的數組會降低性能,你可以返回同一個長度為0的數組,因為所有長度為0的數組都是不可變的;

private static final Cheese[] EMPTY_ARRAY= new Cheese[0];

public Cheeses[] getCheeses(){
	return cheesesInStock.toArray(EMPTY_ARRAY);
}

在優化版本中,我們傳遞了同一個空的數組到每一個toArray的調用,這個數組將會從getCheeses返回,無論cheesesInStock是不是空的,不要期望預分配數組可以提高性能,研究顯示這是適得其反的。

return cheesesInStock.toArray(new Cheese[cheesesInStock.size()]);

如果你只能記住一句話:返回空集合或者數組而不要返回空值

返回空值會讓你的API更難使用并且更容易出錯,并且無性能優勢。

上述內容就是如何降低NPE,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創新互聯行業資訊頻道。

新聞名稱:如何降低NPE
轉載來源:http://m.kartarina.com/article30/pihgso.html

成都網站建設公司_創新互聯,為您提供App開發網站制作用戶體驗虛擬主機網站改版做網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設
主站蜘蛛池模板: 尤物永久免费AV无码网站| 四虎影视无码永久免费| 未满十八18禁止免费无码网站| 日韩精品无码一区二区三区四区| 亚洲成AV人在线播放无码 | 久久久久久亚洲av无码蜜芽| 国产精品va无码二区| 久久无码专区国产精品s| 熟妇人妻无码中文字幕老熟妇| 国产成A人亚洲精V品无码| 无码中文av有码中文a| 无码一区二区三区| 亚洲AⅤ无码一区二区三区在线 | 亚洲A∨无码一区二区三区| 亚洲精品无码高潮喷水A片软| 国产日韩精品无码区免费专区国产 | 国产成人综合日韩精品无码不卡| av潮喷大喷水系列无码| 十八禁视频在线观看免费无码无遮挡骂过| 久久久久久精品无码人妻| 人妻少妇AV无码一区二区| 国产精品无码DVD在线观看| 97免费人妻无码视频| 无码国产乱人伦偷精品视频| 国产成人无码区免费网站| 人妻系列无码专区久久五月天| 亚洲aⅴ无码专区在线观看春色| 台湾无码一区二区| 亚洲av无码乱码国产精品| 一本一道av中文字幕无码| 亚洲区日韩区无码区| 久久无码AV中文出轨人妻| 成人av片无码免费天天看| AV无码精品一区二区三区宅噜噜| 妖精色AV无码国产在线看| 精品亚洲成α人无码成α在线观看 | 人妻丰满熟妞av无码区| 亚洲色av性色在线观无码| 久热中文字幕无码视频| 亚洲中文无码a∨在线观看| 91精品日韩人妻无码久久不卡|