本篇文章和大家了解一下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
});
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捕获异常怎么实现的简略介绍,当然详细使用上面的不同还得要大家自己使用过才领会。如果想了解更多,欢迎关注亿速云行业资讯频道哦!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://juejin.cn/post/7231519147850432573