异常捕获工具类

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异常捕获工具类的更多相关文章

  1. 32.自定义Java异常捕获处理类及其使用

    自定义异常捕获处理类 /** * <h1>异常捕捉</h1> * */ public class ExceptionHandler implements Thread.Unca ...

  2. TP5 try{}catch{}异常捕获不到 解决办法

    问题:TP5用下面的方法, 想要获取抛出的异常捕获不到…… 错误的写法: try{ …… } catch (Exception $e) { echo $e->getMessage(); } 正确 ...

  3. try catch异常捕获

    格式为: try            {                int i = int.Parse(Console.ReadLine());           //容易发生错误的语句    ...

  4. Android 异常捕获

    在用户使用APP时,如果APP毫无征兆的突然退出程序,又没有任何提示信息.我想这是一种最差劲的用户体验了吧,如果是我估计干脆就直接卸载APP了.因此,作为Android开发者对于这种情况的发生一定要有 ...

  5. Servlet过滤器——异常捕获过滤器

    1.概述 介绍如何实现异常捕获过滤器. 2.技术要点 本实例主要是在过滤器Filter的doFilter()方法中,对执行过滤器链的chain的doFilter()语句处添加try…catch异常捕获 ...

  6. 序列化流与反序列化流,打印流,工具类commons-IO

    1序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流 特 ...

  7. C# 异常捕获机制(Try Catch Finally)

    一.C#的异常处理所用到关键字 try 用于检查发生的异常,并帮助发送任何可能的异常. catch 以控制权更大的方式处理错误,可以有多个catch子句. finally 无论是否引发了异常,fina ...

  8. Guava的异常工具类--Throwables

    Guava为我们提供了一个非常方便并且实用的异常处理工具类:Throwables类. 这个类的API可以参见:http://docs.guava-libraries.googlecode.com/gi ...

  9. C#中的异常捕获机制(try catch finally)

    (转自:http://blog.csdn.net/zevin/article/details/6901489) 一.C#的异常处理所用到关键字try 用于检查发生的异常,并帮助发送任何可能的异常.ca ...

  10. java——异常类、异常捕获、finally、异常抛出、自定义异常

    编译错误:由于编写程序不符合程序的语法规定而导致的语法问题. 运行错误:能够顺利的编译通过,但是在程序运行过程中产生的错误. java异常类都是由Throwable类派生而来的,派生出来的两个分支分别 ...

随机推荐

  1. COS数据工作流+云函数最佳实践 - 文件哈希值计算

    01 文件哈希值是什么? 文件哈希值,即文件内容的HASH值.是通过对文件内容进行加密运算得到的一组二进制值,主要用途是用于文件校验或签名.正是因为这样的特点,它常常用来判断两个文件是否相同. COS ...

  2. 出现警告信息 Please enter a commit message to explain why this merge is necessary,

    Please enter a commit message to explain why this merge is necessary, # especially if it merges an u ...

  3. 配置 HTTP/HTTPS 网络代理

    使用Docker的过程中,因为网络原因,通常需要使用 HTTP/HTTPS 代理来加速镜像拉取.构建和使用.下面是常见的三种场景.   为 dockerd 设置网络代理 "docker pu ...

  4. Docker基础教程快速入门 Linux CentOS安装与使用Docker容器

    Docker 介绍 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容器解决方案. Docker 将应用程序与该程序的依赖,打包在一个文件里面 ...

  5. Qt编写物联网管理平台44-告警邮件转发

    一.前言 上一篇文章说的是告警短信发送,这种效率非常高,缺点也很明显,需要购买特定的短信硬件设备支持才行,而且每条短信都要收费,如果要求发送的短信数量特别多,这个费用常年累月下来也是不少的,客户就不愿 ...

  6. Qt开发经验小技巧216-220

    Qt的网络库支持udp广播搜索和组播搜索,其中组播搜索可以跨网段搜索,有时候你会发现失灵,此时你可以尝试把本地的虚拟机的网卡禁用试试,估计就好了.还有就是在本地开启了代理啥的,先关掉试试.近期在使用t ...

  7. Qt编写地图综合应用35-设备分布图

    一.前言 设备分布图在所有的地图应用案例项目中,最常见最普遍最基础,就是将项目中的设备信息,比如设备名称.设备所在的经纬度坐标.设备的其他信息(设备地址.设备参数等),通过标注点的形式添加到地图中,至 ...

  8. IM群聊消息的已读未读功能在存储空间方面的实现思路探讨

    1.引言 IM系统中,特别是在企业应用场景下,消息的已读未读状态是一个强需求. 以阿里的钉钉为例,钉钉的产品定位是用于商务交流,其"强制已读回执"功能,让职场人无法再"假 ...

  9. Python 项目组织最佳实践:从脚本到大型项目的进化之路

    在 Python 开发生涯中,相信很多人都是从写简单脚本开始的.随着项目规模扩大,我们会遇到各种项目组织的问题.今天,让我们从一个实际场景出发,看看如何一步步优化 Python 项目结构,实现从简单脚 ...

  10. Windows下的GDAL环境配置

    Windows下的GDAL环境配置 在Windows下GDAL环境的配置方式有很多种,我尝试了很多不同的配置方式,包括Anaconda. GISInternals.QGIS.OSGeo4W等, 我这里 ...