Java使用Catcher捕獲異常的實(shí)現(xiàn)
概述
平時(shí)開發(fā)中,我們經(jīng)常會(huì)處理一些不得不處理的檢查性異常以及一些無(wú)關(guān)緊要的一場(chǎng),例如:
try {
doSomething();
} catch (Exception e) {
e.printStackTrace();
//or Logger.d("error:" + e.getMessage());
}即便只是想忽略掉異常也得寫成:
try {
doSomething();
} catch (Exception ignore) {
}實(shí)際上,這類代碼我們通常只關(guān)心三個(gè)部分:1. 執(zhí)行的動(dòng)作;2. 和動(dòng)作關(guān)聯(lián)的異常;3. 異常的處理方式。想象中的偽代碼可能是這樣的:
capture IOException?
? ? from () -> {
? ? }
? ? to handleIOException轉(zhuǎn)換為Java代碼,就是:
Catcher.capture(IllegalAccessException.class)
.from(() -> {
//do something
throw new Exception("kdsfkj");
}).to(Main::onFailed);
//或
Catcher.capture(IllegalAccessException.class, IOException.class)
.from(() -> {
//do something
throw new Exception("kdsfkj");
})
.to(e -> {
//handle exception
});Catcher的實(shí)現(xiàn)
public class Catcher {
? ? List<Class<?>> classes = new LinkedList<>();
? ? private Action action;
? ? private ?<T extends Exception> Catcher(List<Class<? extends T>> list) {
? ? ? ? classes.addAll(list);
? ? }
? ? @SafeVarargs
? ? public static <T extends Exception> Catcher capture(Class<? extends T>... classes){
? ? ? ? List<Class<? extends T>> list = Arrays.asList(classes);
? ? ? ? return new Catcher(list);
? ? }
? ? public Catcher from(Action action){
? ? ? ? this.action = action;
? ? ? ? return this;
? ? }
? ? public void to(Consumer<Exception> exceptionConsumer){
? ? ? ? try {
? ? ? ? ? ? action.run();
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? for(Class<?> mClass : classes){
? ? ? ? ? ? ? ? if(mClass.isInstance(e)){
? ? ? ? ? ? ? ? ? ? exceptionConsumer.accept(e);
? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? throw new IllegalStateException(e);
? ? ? ? }
? ? }
? ? public interface Action{
? ? ? ? void run() throws Exception;
? ? }
}注意:本文所展示的代碼僅用于娛樂(lè)用途,如有啟發(fā),純屬巧合,請(qǐng)勿用在實(shí)際生產(chǎn)環(huán)境
到此這篇關(guān)于Java使用Catcher捕獲異常的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java Catcher捕獲異常內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
95%的Java程序員人都用不好Synchronized詳解
這篇文章主要為大家介紹了95%的Java程序員人都用不好Synchronized詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
SSM如何實(shí)現(xiàn)在Controller中添加事務(wù)管理
這篇文章主要介紹了SSM如何實(shí)現(xiàn)在Controller中添加事務(wù)管理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Java8新特性Lambda表達(dá)式的一些復(fù)雜用法總結(jié)
lambda表達(dá)式是JAVA8中提供的一種新的特性,它支持Java也能進(jìn)行簡(jiǎn)單的“函數(shù)式編程”。 下面這篇文章主要給大家介紹了關(guān)于Java8新特性Lambda表達(dá)式的一些復(fù)雜用法的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07
仿釘釘流程輕松實(shí)現(xiàn)JSON轉(zhuǎn)BPMN完整實(shí)現(xiàn)過(guò)程示例
這篇文章主要為大家介紹了仿釘釘流程輕松實(shí)現(xiàn)JSON轉(zhuǎn)BPMN完整實(shí)現(xiàn)過(guò)程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Spring MVC 404 Not Found無(wú)錯(cuò)誤日志的解決方法
這篇文章主要為大家詳細(xì)介紹了Spring MVC 404 Not Found無(wú)錯(cuò)誤日志的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Spring Boot 2.0 設(shè)置網(wǎng)站默認(rèn)首頁(yè)的實(shí)現(xiàn)代碼
這篇文章主要介紹了Spring Boot 2.0 設(shè)置網(wǎng)站默認(rèn)首頁(yè)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-04-04
Java實(shí)現(xiàn)解析Excel復(fù)雜表頭
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)解析Excel復(fù)雜表頭功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-01-01
Springboot上傳文件時(shí)提示405問(wèn)題及排坑過(guò)程
這篇文章主要介紹了Springboot上傳文件時(shí)提示405問(wèn)題及排坑過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07

