异常捕获工具类

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. bytecode 生成器

    基础 objectweb asm 很难用,找了几个高级点的. activej codegen 这个库很像 .net DLR 风格,采用 Expression 抽象,例如 Expressions.add ...

  2. Linux readonly

    1. 概念readonly在shell脚本中,用来标记变量是只读的,后续执行过程中就不能对其值进行改变,这个用来定义一些常量类的变量. 如果对其进行重新赋值,会提示错误 [root@localhost ...

  3. Qt编写可视化大屏电子看板系统15-曲线面积图

    一.前言 曲线面积图其实就是在曲线图上增加了颜色填充,单纯的曲线可能就只有线条以及数据点,面积图则需要从坐标轴的左下角和右下角联合曲线形成完整的封闭区域路径,然后对这个路径进行颜色填充,为了更美观的效 ...

  4. Qt音视频开发20-海康sdk本地播放

    一.前言 海康sdk中包含了MP4解码播放库,对应的API函数都是PlayM4开头的,顾名思义播放MP4,海康的视频默认可以保存成MP4文件,可以用通用的播放器来播放,这就是为啥前面好多篇文章讲到的各 ...

  5. C#操作MySQL数据库——思路简单清晰

    1.下载mysql.Data.dll,在解决方案->引用中引入,并在文件头部引入 using MySql.Data.MySqlClient; 2.创建MySqlConnection对象(链接库) ...

  6. Java并发包常用类用法及原理

    com.java.util.concurrent包是java5时添加的,专门处理多线程提供的工具类 一.Atomic 二.Lock 三.BlockingQueue 四.BlockDeque 五.Con ...

  7. 【java提高】---细则(1)

    异常 一.异常与错误的区别 再讲异常之前我们就应该要知道异常和错误的区别 Error类和Exception类的父类都是throwable类,他们的区别是: Error类一般是指与虚拟机相关的问题,如系 ...

  8. DeepSeek太火,但老板们别慌,这里有份AI项目开展手册

    关注公众号回复1 获取一线.总监.高管<管理秘籍> 这两天有老板陆续在咨询:到底应该如何基于DeepSeek开展AI项目? 抛开一些偏细节.偏敏感的付费内容,其实有一套方法论倒是可以分享. ...

  9. MTV和MVC模式,初识模板

    MTV和MVC模式,初识模板1.MTV和MVC模式:分层级进行管理 说到框架模式我们有必要简单的说下设计模式,了解下设计模式这个概念,因为有人对设计模式和框架模式的概念经常混淆 设计模式: 是一套被反 ...

  10. InfluxDB修改数据存储位置(二进制安装版)

    InfluxDB修改数据存储位置(二进制安装版) 在二进制安装方式下,修改InfluxDB的数据存储位置通常涉及以下几个步骤.以下步骤以InfluxDB 2.x版本为例进行说明,因为InfluxDB ...