Java使用Catcher捕获异常的实现

Jacinthe ·
更新时间:2024-05-16
· 1630 次阅读

目录

概述

Catcher的实现

概述

平时开发中,我们经常会处理一些不得不处理的检查性异常以及一些无关紧要的一场,例如:

try { doSomething(); } catch (Exception e) { e.printStackTrace(); //or Logger.d("error:" + e.getMessage()); }

即便只是想忽略掉异常也得写成:

try { doSomething(); } catch (Exception ignore) { }

实际上,这类代码我们通常只关心三个部分:1. 执行的动作;2. 和动作关联的异常;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的实现 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;     } }

注意:本文所展示的代码仅用于娱乐用途,如有启发,纯属巧合,请勿用在实际生产环境

到此这篇关于Java使用Catcher捕获异常的实现的文章就介绍到这了,更多相关Java Catcher捕获异常内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!



异常 JAVA

需要 登录 后方可回复, 如果你还没有账号请 注册新账号