异常捕获工具类

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. IOS CABasicAnimation实现旋转动画

    IOS CABasicAnimation实现旋转动画 定义一个CABasicAnimation lazy var rotateAnimation: CABasicAnimation = { let a ...

  2. 使用 .NET Core 实现一个自定义日志记录器

    目录 引言 1. 抽象包 1.1 定义日志记录接口 1.2 定义日志记录抽象类 1.3 表结构迁移 2. EntityFramework Core 的实现 2.1 数据库上下文 2.2 实现日志写入 ...

  3. Advanced .NET Remoting: 第 9 章 3.在 Remoting 中传递额外的运行时信息

    Advanced .NET Remoting:第 9 章 3.传递运行时信息 前面使用的接收器 ( Sink ) 是 IClientChannelSinks 与 IServerChannelSinks ...

  4. 【javaweb】【Session】记录用户访问时间

    效果 Servlet import jakarta.servlet.*; import jakarta.servlet.http.*; import jakarta.servlet.annotatio ...

  5. 爬虫自动化脚本+AI赋能

    简介 估计大家对网页爬取和数据抓取已经有所了解,市面上也有许多现成的软件可供使用.例如,前几天群里有位朋友利用爬虫技术抓取了AV网站,并搭建了一个磁力链接站点. 本文将介绍如何模拟手动操作,将一些繁琐 ...

  6. python中replace不能把 \n 替换过去

    问题 简要描述:python中,字符串的 replace 不能把 \n 符号带过去 截图说明 暂时的解决办法 在replace之前,先把要替换的字符串的 \n 去掉

  7. JunitGenerator

    ######################################################################################## ## ## Avail ...

  8. 超轻巧modbus调试助手使用说明

    一.使用说明 1.1 数据格式 和其他的modbus采集工具一样,本组件也支持各种数据格式,其实就是高字节低字节的顺序. 一般是2字节表示一个数据,后面又有4字节表示一个数据,目前好像还有8字节表示一 ...

  9. Qt/C++开发经验小技巧286-290

    国内站点:https://gitee.com/feiyangqingyun 国际站点:https://github.com/feiyangqingyun 很多时候项目越写越大,然后就可能遇到,明明之前 ...

  10. Qt编写视频监控管理平台(支持海康/大华/宇视/华为/天地伟业/H264/H265等)

    一.前言 海康大华等厂家自己的客户端软件,基本上都是支持自家的设备,不支持其他家的摄像机和硬盘录像机,并不是因为技术上做不到,这些大厂要实现支持兼容其他的家的(他们家的服务端或者收费的都是支持其他家的 ...