Java使用Catcher捕获异常的实现

 更新时间:2023年05月12日 15:45:32   作者:乐征skyline  
本文主要介绍了Java使用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捕获异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 95%的Java程序员人都用不好Synchronized详解

    95%的Java程序员人都用不好Synchronized详解

    这篇文章主要为大家介绍了95%的Java程序员人都用不好Synchronized详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • SSM如何实现在Controller中添加事务管理

    SSM如何实现在Controller中添加事务管理

    这篇文章主要介绍了SSM如何实现在Controller中添加事务管理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java8新特性Lambda表达式的一些复杂用法总结

    Java8新特性Lambda表达式的一些复杂用法总结

    lambda表达式是JAVA8中提供的一种新的特性,它支持Java也能进行简单的“函数式编程”。 下面这篇文章主要给大家介绍了关于Java8新特性Lambda表达式的一些复杂用法的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • 仿钉钉流程轻松实现JSON转BPMN完整实现过程示例

    仿钉钉流程轻松实现JSON转BPMN完整实现过程示例

    这篇文章主要为大家介绍了仿钉钉流程轻松实现JSON转BPMN完整实现过程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Spring MVC 404 Not Found无错误日志的解决方法

    Spring MVC 404 Not Found无错误日志的解决方法

    这篇文章主要为大家详细介绍了Spring MVC 404 Not Found无错误日志的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Spring Boot 2.0 设置网站默认首页的实现代码

    Spring Boot 2.0 设置网站默认首页的实现代码

    这篇文章主要介绍了Spring Boot 2.0 设置网站默认首页的实现代码,需要的朋友可以参考下
    2018-04-04
  • java  LinkedList源码详解及实例

    java LinkedList源码详解及实例

    这篇文章主要介绍了java LinkedList源码详解及实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • Java实现解析Excel复杂表头

    Java实现解析Excel复杂表头

    这篇文章主要为大家详细介绍了如何使用Java实现解析Excel复杂表头功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-01-01
  • java中stream的peek()用法详解

    java中stream的peek()用法详解

    这篇文章主要介绍了java中stream的peek()用法详解,peek的作用是
    改变元素的内部状态,对每个object执行 saveInfomation(object, params),然后把结果收集到一个 List 里,这里涉及到了最终操作,需要的朋友可以参考下
    2024-01-01
  • Springboot上传文件时提示405问题及排坑过程

    Springboot上传文件时提示405问题及排坑过程

    这篇文章主要介绍了Springboot上传文件时提示405问题及排坑过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07

最新评论