摘要:異常類列舉了中部分的異常類,其中最常見的當屬了,程序員必須小心提防,所幸中引入了類這個語法糖來更好的處理這個異常。函數式接口可以被實現為,更進一步可以轉換為表達式,如果只是調用了一個函數,還可以用。
JAVA異常類列舉了Java中部分的異常類,其中最常見的當屬NullPointerException了,程序員必須小心提防,所幸Java 8中引入了Optional類這個語法糖來更好的處理這個異常。
比如有如下三個類需要遞歸引用:
class FirstLayer { private SecondLayer secondLayer; public SecondLayer getSecondLayer(){ return secondLayer; } } class SecondLayer { private ThirdLayer thirdLayer; public ThirdLayer getThirdLayer() { return thirdLayer; } } class ThirdLayer { private String foo; public String getFoo(){ return foo; } }
之前的做法是:
FirstLayer firstLayer = new FirstLayer(); if (firstLayer != null && firstLayer.getSecondLayer() != null && firstLayer.getSecondLayer().getThirdLayer() != null) { System.out.println(firstLayer.getSecondLayer().getThirdLayer().getFoo()); }
現在可以:
Optional.of(new FirstLayer()).map(FirstLayer::getSecondLayer).map(SecondLayer::getThirdLayer).map(ThirdLayer::getFoo).ifPresent(System.out::println);
在map函數內部會進行null校驗,同時這里還使用了method reference,詳細解釋請參加:Java 8 Method Reference: How to Use it
甚至還可以:
public staticOptional resolve(Supplier resolver) { try { T result = resolver.get(); return Optional.ofNullable(result); } catch (NullPointerException e){ return Optional.empty(); } } FirstLayer firstLayer = new FirstLayer(); resolve(() -> firstLayer.getSecondLayer().getThirdLayer().getFoo()).ifPresent(System.out::println); }
其中,Supplier是一種函數式接口(Functional Interface),就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。函數式接口可以被實現為anonymous class,更進一步可以轉換為lambda表達式,如果只是調用了一個函數,還可以用method reference。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74776.html
摘要:在中避免檢查原文譯者來源在中避免檢查如何預防中著名的異常這是每個初學者遲早會問到的關鍵問題之一。引用的發明者在年道歉,并稱這種錯誤為他的十億美元錯誤。但幸運的是這在中得到了改善。檢查是在底層自動處理的。 在 Java 8 中避免 Null 檢查 原文:Avoid Null Checks in Java 8 譯者:ostatsu 來源:在 Java 8 中避免 Null 檢查 如何預...
摘要:是第一批在堆上分配記錄的類型語言之一。實際上,的這段話低估了過去五十年來數百萬程序員為修復空引用所耗費的代價。很明顯,這種方式不具備擴展性,同時還犧牲了代碼的可讀性。是目前程序開發中最典型的異常。完成這一任務有多種方法。 用Optional取代null 如果你作為Java程序員曾經遭遇過NullPointerException,請舉起手。如果這是你最常遭遇的異常,請繼續舉手。非常可惜,...
摘要:近日,在上列舉了開發中常見的個錯誤,與君共免。在多線程中并發修改集合內容是非常常見的,因此需要使用并發編程中常用的方法進行處理,例如同步鎖對于并發修改采用特殊的集合等等。在單線程和多線程情況下解決這個問題有微小的差別。 在編程時,開發者經常會遭遇各式各樣莫名錯誤。近日,Sushil Das 在 Geek On Java上列舉了 Java 開發中常見的 5 個錯誤,與君共「免」。 原文...
摘要:與方法的區別在于,方法傳入的參數為一個接口的實現當中有值的時候,返回值當中沒有值的時候,返回從該獲得的值。為的用戶沒有找到舉一個的用途在的控制器中,我們可以配置統一處理各種異常。 寫過 Java 程序的同學,一般都遇到過 NullPointerException :) —— 為了不拋出這個異常,我們便會寫如下的代碼: User user = getUserById(id); if (u...
摘要:但返回的是一個類型的對象,這意味著操作的結果是一個類型的對象。反之,如果對象存在,這次調用就會將其作為函數的輸入,并按照與方法的約定返回一個對象。 一、Optional 類入門 Java 8中引入了一個新的類java.util.Optional。變量存在時,Optional類只是對類簡單封裝。變量不存在時,缺失的值會被建模成一個空的Optional對象,由方法Optional.empt...
閱讀 830·2021-09-22 15:18
閱讀 1181·2021-09-09 09:33
閱讀 2758·2019-08-30 10:56
閱讀 1184·2019-08-29 16:30
閱讀 1488·2019-08-29 13:02
閱讀 1458·2019-08-26 13:55
閱讀 1645·2019-08-26 13:41
閱讀 1941·2019-08-26 11:56