try catch异常捕获工具类
异常捕获工具类
package com.example.multiThreadTransaction_demo.utils; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier; /**
* 异常捕获工具类
* <p>
* 不支持finally
* 异常信息提示日志必须打印
*
* @author: shf
* @date: 2023年03月09日 12:59
*/
@Slf4j
public class TryCatchUtil<T, R> { /**
* 入参
*/
private T param; /**
* 返回值(可自定义设置默认值)
*/
private R result; /**
* 异常提示日志打印(可自定义设置)
*/
private String errLogMsg; public TryCatchUtil(T param, R result, String errLogMsg) {
this.param = param;
this.result = result;
this.errLogMsg = errLogMsg;
} /**
* 没有默认值抛出异常将返回null,注意NPE处理
* @param errLogMsg 异常日志提示
* @return
*/
public static <T, R> TryCatchUtil<T, R> of(String errLogMsg) {
return of(null, errLogMsg);
} public static <T, R> TryCatchUtil<T, R> of(T param, String errLogMsg) {
return of(param, null, errLogMsg);
} public static <T, R> TryCatchUtil<T, R> of(T param, R defaultVal, String errLogMsg) {
return new TryCatchUtil<>(param, defaultVal, errLogMsg);
} /**
* 有入参 有返回值
*
* @param function 函数式接口入参
* @return R
*/
public R apply(Function<T, R> function) {
try {
result = function.apply(param);
} catch (Throwable e) {
log.error(StringUtils.isNotBlank(errLogMsg) ? errLogMsg : e.getMessage(), e);
}
return result;
} /**
* 有入参 无返回值
*
* @param consumer 函数式接口入参
*/
public void accept(Consumer<T> consumer) {
try {
consumer.accept(param);
} catch (Throwable e) {
log.error(StringUtils.isNotBlank(errLogMsg) ? errLogMsg : e.getMessage(), e);
}
} /**
* 无入参 有返回值
*
* @param supplier 函数式接口入参
* @return R
*/
public R get(Supplier<R> supplier) {
try {
return supplier.get();
} catch (Throwable e) {
log.error(StringUtils.isNotBlank(errLogMsg) ? errLogMsg : e.getMessage(), e);
}
return result;
} /**
* 无入参 无返回值
*
* @param exceptionFunction 函数式接口入参
*/
public void handle(ExceptionFunction exceptionFunction) {
try {
exceptionFunction.applay();
} catch (Throwable e) {
log.error(StringUtils.isNotBlank(errLogMsg) ? errLogMsg : e.getMessage(), e);
}
} /**
* 自定义异常Function
*/
@FunctionalInterface
public interface ExceptionFunction { void applay();
} /**
* 测试用例
*
* @param isThrow 是否抛出异常
* @return int
*/
private static Integer applyTest(Boolean isThrow) {
log.info("---applyTest---");
if (isThrow) {
int a = 1 / 0;
}
return 1;
} /**
* 测试用例
*
* @return int
*/
private static Integer getTest() {
log.info("---getTest---");
return 2;
} /**
* 测试用例
*
* @param isThrow 是否抛出异常
*/
private static void acceptTest(Boolean isThrow) {
log.info("---acceptTest---");
if (isThrow) {
int a = 1 / 0;
}
} /**
* 测试用例
*/
private static void handleTest() {
log.info("---handleTest---");
} public static void main(String[] args) {
Integer apply1 = TryCatchUtil.<Boolean, Integer>of(true, 100, "测试异常").apply(TryCatchUtil::applyTest);
Integer apply2 = TryCatchUtil.<Boolean, Integer>of(true, "测试异常").apply(TryCatchUtil::applyTest);
Integer get2 = TryCatchUtil.<Boolean, Integer>of("测试异常").get(TryCatchUtil::getTest);
TryCatchUtil.of(false, "测试异常").accept(TryCatchUtil::acceptTest);
TryCatchUtil.of("测试异常").handle(TryCatchUtil::handleTest); log.info("apply1=[{}];apply2=[{}];get2=[{}]", apply1, apply2, get2);
}
}
try catch异常捕获工具类的更多相关文章
- 32.自定义Java异常捕获处理类及其使用
自定义异常捕获处理类 /** * <h1>异常捕捉</h1> * */ public class ExceptionHandler implements Thread.Unca ...
- TP5 try{}catch{}异常捕获不到 解决办法
问题:TP5用下面的方法, 想要获取抛出的异常捕获不到…… 错误的写法: try{ …… } catch (Exception $e) { echo $e->getMessage(); } 正确 ...
- try catch异常捕获
格式为: try { int i = int.Parse(Console.ReadLine()); //容易发生错误的语句 ...
- Android 异常捕获
在用户使用APP时,如果APP毫无征兆的突然退出程序,又没有任何提示信息.我想这是一种最差劲的用户体验了吧,如果是我估计干脆就直接卸载APP了.因此,作为Android开发者对于这种情况的发生一定要有 ...
- Servlet过滤器——异常捕获过滤器
1.概述 介绍如何实现异常捕获过滤器. 2.技术要点 本实例主要是在过滤器Filter的doFilter()方法中,对执行过滤器链的chain的doFilter()语句处添加try…catch异常捕获 ...
- 序列化流与反序列化流,打印流,工具类commons-IO
1序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream 称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流 特 ...
- C# 异常捕获机制(Try Catch Finally)
一.C#的异常处理所用到关键字 try 用于检查发生的异常,并帮助发送任何可能的异常. catch 以控制权更大的方式处理错误,可以有多个catch子句. finally 无论是否引发了异常,fina ...
- Guava的异常工具类--Throwables
Guava为我们提供了一个非常方便并且实用的异常处理工具类:Throwables类. 这个类的API可以参见:http://docs.guava-libraries.googlecode.com/gi ...
- C#中的异常捕获机制(try catch finally)
(转自:http://blog.csdn.net/zevin/article/details/6901489) 一.C#的异常处理所用到关键字try 用于检查发生的异常,并帮助发送任何可能的异常.ca ...
- java——异常类、异常捕获、finally、异常抛出、自定义异常
编译错误:由于编写程序不符合程序的语法规定而导致的语法问题. 运行错误:能够顺利的编译通过,但是在程序运行过程中产生的错误. java异常类都是由Throwable类派生而来的,派生出来的两个分支分别 ...
随机推荐
- cs-script:一个非常成熟的C#脚本开源引擎
推荐一个强大C#脚本引擎,方便我们在项目中,动态执行C#脚本. 01 项目简介 CS-Script是非常成熟的C#脚本引擎,自2004年起就发布了,即.NET发布后的两年. 支持托管和独立(CLI)执 ...
- python_Django---基础
1.创建app 终端:python3.x manage.py startapp app(名字) 2.路由创建 urls.py: 导入函数:from app(app名) import views 创建 ...
- Qt音视频开发47-通用视频控件
一.前言 自从视频监控系统的内核不断增加,从最初的vlc到ffmpeg然后到mpv,后面还陆续增加了海康sdk等,每次增加一个内核,整个视频监控系统就有三五个代码文件需要修改,而且大部分是重复的代码, ...
- Qt编写安防视频监控系统31-onvif设备搜索
一.前言 做视频监控系统,绕不过onvif这玩意,这玩意主要就是为了统一一个大概的标准,能够对各个厂家的监控设备进行常用的一些操作,比如搜索.获取信息.云台控制.事件订阅.抓拍图片等,如果没有这个规范 ...
- 肖健雄(Jianxiong Xiao)的开源SFM代码SFMedu的运行方法
注意:本文是针对肖健雄(Jianxiong Xiao)博士的的开源SFM代码SFMedu(https://github.com/jianxiongxiao/SFMedu)的运行方法. 本人的运行环境: ...
- 即时通讯技术文集(第37期):IM代码入门实践(Part1) [共16篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第37 期. [- 1 -] 一种Android端IM智能心跳算法的设计与实现探讨(含样例代码) ...
- 阿里技术分享:闲鱼IM基于Flutter的移动端跨端改造实践
本文由阿里闲鱼技术团队祈晴分享,本次有修订和改动,感谢作者的技术分享. 1.内容概述 本文总结了阿里闲鱼技术团队使用Flutter在对闲鱼IM进行移动端跨端改造过程中的技术实践等,文中对比了传统Nat ...
- 21. C++快速入门--协程 Coroutine 入门
参考: https://www.cnblogs.com/blizzard8204/p/17563217.html https://www.bennyhuo.com/2022/03/09/cpp-cor ...
- c# 调用DeepAI
包括画卡通画,找出2张图片的相似度,电脑做梦的图片生成,利用GTP-2的文本续写. using System; using System.Collections.Concurrent; using S ...
- 2020年最新版区块链面试题2-copy
1. 问:你认为区块链技术中的区块意味着什么? 区块链由所有金融交易的信息组成.一个块只不过是一个记录列表.当这些列表相互结合时,它们被称为区块链.例如,一个组织有100个分类账簿,其中的组合被称为区 ...