Java使用Catcher捕獲異常的實現(xiàn)
概述
平時開發(fā)中,我們經常會處理一些不得不處理的檢查性異常以及一些無關緊要的一場,例如:
try { doSomething(); } catch (Exception e) { e.printStackTrace(); //or Logger.d("error:" + e.getMessage()); }
即便只是想忽略掉異常也得寫成:
try { doSomething(); } catch (Exception ignore) { }
實際上,這類代碼我們通常只關心三個部分:1. 執(zhí)行的動作;2. 和動作關聯(lián)的異常;3. 異常的處理方式。想象中的偽代碼可能是這樣的:
capture IOException? ? ? from () -> { ? ? } ? ? to handleIOException
轉換為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的實現(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; ? ? } }
注意:本文所展示的代碼僅用于娛樂用途,如有啟發(fā),純屬巧合,請勿用在實際生產環(huán)境
到此這篇關于Java使用Catcher捕獲異常的實現(xiàn)的文章就介紹到這了,更多相關Java Catcher捕獲異常內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java FileDescriptor總結_動力節(jié)點Java學院整理
FileDescriptor 是“文件描述符”。可以被用來表示開放文件、開放套接字等。接下來通過本文給大家分享Java FileDescriptor總結,感興趣的朋友一起學習吧2017-05-05使用maven對springboot項目進行瘦身分離jar的多種處理方案
springboot項目打包一般我們都使用它自帶的spring-boot-maven-plugin插件,這個插件默認情況下,會把所有的依賴包全部壓縮到一個jar里面,今天給大家分享幾種方案來如何減小我們的打包文件,需要的朋友可以參考下2024-02-02SpringBoot使用SchedulingConfigurer實現(xiàn)多個定時任務多機器部署問題(推薦)
這篇文章主要介紹了SpringBoot使用SchedulingConfigurer實現(xiàn)多個定時任務多機器部署問題,定時任務多機器部署解決方案,方式一拆分,單獨拆分出來,單獨跑一個應用,方式二是基于aop攔截處理(搶占執(zhí)行),只要有一個執(zhí)行,其它都不執(zhí)行,需要的朋友可以參考下2023-01-01Java基于Guava Retrying實現(xiàn)重試功能
這篇文章主要介紹了Java基于Guava Retrying實現(xiàn)重試功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-07-07