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类派生而来的,派生出来的两个分支分别 ...
随机推荐
- IOS CABasicAnimation实现旋转动画
IOS CABasicAnimation实现旋转动画 定义一个CABasicAnimation lazy var rotateAnimation: CABasicAnimation = { let a ...
- 使用 .NET Core 实现一个自定义日志记录器
目录 引言 1. 抽象包 1.1 定义日志记录接口 1.2 定义日志记录抽象类 1.3 表结构迁移 2. EntityFramework Core 的实现 2.1 数据库上下文 2.2 实现日志写入 ...
- Advanced .NET Remoting: 第 9 章 3.在 Remoting 中传递额外的运行时信息
Advanced .NET Remoting:第 9 章 3.传递运行时信息 前面使用的接收器 ( Sink ) 是 IClientChannelSinks 与 IServerChannelSinks ...
- 【javaweb】【Session】记录用户访问时间
效果 Servlet import jakarta.servlet.*; import jakarta.servlet.http.*; import jakarta.servlet.annotatio ...
- 爬虫自动化脚本+AI赋能
简介 估计大家对网页爬取和数据抓取已经有所了解,市面上也有许多现成的软件可供使用.例如,前几天群里有位朋友利用爬虫技术抓取了AV网站,并搭建了一个磁力链接站点. 本文将介绍如何模拟手动操作,将一些繁琐 ...
- python中replace不能把 \n 替换过去
问题 简要描述:python中,字符串的 replace 不能把 \n 符号带过去 截图说明 暂时的解决办法 在replace之前,先把要替换的字符串的 \n 去掉
- JunitGenerator
######################################################################################## ## ## Avail ...
- 超轻巧modbus调试助手使用说明
一.使用说明 1.1 数据格式 和其他的modbus采集工具一样,本组件也支持各种数据格式,其实就是高字节低字节的顺序. 一般是2字节表示一个数据,后面又有4字节表示一个数据,目前好像还有8字节表示一 ...
- Qt/C++开发经验小技巧286-290
国内站点:https://gitee.com/feiyangqingyun 国际站点:https://github.com/feiyangqingyun 很多时候项目越写越大,然后就可能遇到,明明之前 ...
- Qt编写视频监控管理平台(支持海康/大华/宇视/华为/天地伟业/H264/H265等)
一.前言 海康大华等厂家自己的客户端软件,基本上都是支持自家的设备,不支持其他家的摄像机和硬盘录像机,并不是因为技术上做不到,这些大厂要实现支持兼容其他的家的(他们家的服务端或者收费的都是支持其他家的 ...