java关于throw Exception的一个小秘密

简介: java关于throw Exception的一个小秘密

目录



java关于throw Exception的一个小秘密


简介


之前的文章我们讲到,在stream中处理异常,需要将checked exception转换为unchecked exception来处理。


我们是这样做的:


static <T> Consumer<T> consumerWrapper(
            ThrowingConsumer<T, Exception> throwingConsumer) {
        return i -> {
            try {
                throwingConsumer.accept(i);
            } catch (Exception ex) {
                throw new RuntimeException(ex);
            }
        };
    }


将异常捕获,然后封装成为RuntimeException。


封装成RuntimeException感觉总是有那么一点点问题,那么有没有什么更好的办法?


throw小诀窍


java的类型推断大家应该都知道,如果是 这样的形式,那么T将会被认为是RuntimeException!


我们看下例子:


public class RethrowException {
    public static <T extends Exception, R> R throwException(Exception t) throws T {
        throw (T) t; // just throw it, convert checked exception to unchecked exception
    }
}


上面的类中,我们定义了一个throwException方法,接收一个Exception参数,将其转换为T,这里的T就是unchecked exception。


接下来看下具体的使用:


@Slf4j
public class RethrowUsage {
    public static void main(String[] args) {
        try {
            throwIOException();
        } catch (IOException e) {
           log.error(e.getMessage(),e);
            RethrowException.throwException(e);
        }
    }
    static void throwIOException() throws IOException{
        throw new IOException("io exception");
    }
}


上面的例子中,我们将一个IOException转换成了一个unchecked exception。


总结


本文介绍了一种特殊的异常转换的例子,大家可以参考一下。


本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/rethrow-exception

相关文章
|
2月前
|
Java UED 开发者
Java异常处理新玩法:throw关键字,你的错误管理利器!
Java异常处理新玩法:throw关键字,你的错误管理利器!
27 1
|
2月前
|
前端开发 Java 开发者
Java高手的秘籍:throw关键字,让异常处理游刃有余!
Java高手的秘籍:throw关键字,让异常处理游刃有余!
27 1
|
2月前
|
人工智能 小程序 Java
【Java】throw异常后代码还执行吗?80%小伙伴竟然不知道
本文通过具体的Java代码示例,探讨了Java异常处理机制下的程序流程变化,包括未使用try-catch时异常导致流程中断、使用try-catch捕获异常后的不同执行路径、循环中的异常处理以及throw抛出异常后的代码执行情况。总结了异常处理的关键点,强调了finally块的重要性。
48 4
【Java】throw异常后代码还执行吗?80%小伙伴竟然不知道
|
2月前
|
Java 测试技术 Maven
成功解决:nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
这篇文章介绍了解决Spring框架中出现的`java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource`错误的步骤,指出错误原因是缺少`spring-aop`模块的jar包,并提供了通过Maven依赖或手动添加jar包到项目中的方法来解决这个问题。
成功解决:nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
|
2月前
|
Java 开发者 UED
Java异常处理进阶:throw关键字,打造坚不可摧的错误防御体系!
在 Java 开发中,异常处理至关重要,`throw` 关键字是其中的关键武器,帮助开发者主动抛出异常,构建强大的错误防御体系。本文通过技术博客形式,详细介绍 `throw` 的使用方法及其在业务逻辑中的实战应用,如电商系统订单金额验证,并演示如何利用 `throw` 构建异常链,实现完整的错误信息传递。通过这些技巧,你可以大幅提升 Java 应用的稳定性和用户体验。
29 3
|
3月前
|
消息中间件 Java Kafka
zookeeper:Unexpected exception, exiting abnormally ::java.io.EOFException
zookeeper:Unexpected exception, exiting abnormally ::java.io.EOFException
95 1
zookeeper:Unexpected exception, exiting abnormally ::java.io.EOFException
|
2月前
|
网络协议 Java 数据库连接
13 Java异常(异常过程解析、throw、throws、try-catch关键字)
13 Java异常(异常过程解析、throw、throws、try-catch关键字)
46 2
|
2月前
|
Java 编译器
Java 中 throw 和 throws 的区别
【8月更文挑战第22天】
47 0
|
2月前
|
Java
Exception in thread "main" java.lang.UnsatisfiedLinkError: xxx()V
Exception in thread "main" java.lang.UnsatisfiedLinkError: xxx()V
15 0
|
4月前
|
Java 开发者 UED
【实战攻略】Java异常处理进阶:throw关键字,打造坚不可摧的错误防御体系!
【6月更文挑战第19天】在Java中,`throw`关键字用于主动抛出异常,特别是在检测到错误条件如非法参数时。通过`throw`,开发者能控制何时中断程序并提供清晰的错误信息。例如,在验证订单金额时,如果金额小于等于零,可以抛出`IllegalArgumentException`。此外,`throw`还可用于构建异常链,保留错误上下文,便于问题追溯。掌握`throw`使用,是构建健壮异常处理和提升用户体验的关键。
46 6