专栏首页程序那些事关于throw Exception的一个小秘密

关于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。

总结

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

本文分享自微信公众号 - 程序那些事(flydean-tech),作者:flydean

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Cloud OpenFeign使用教程

    之前项目中需要在Spring Cloud中使用OpenFeign的情况,Spring Cloud的版本是目前最新的Greenwich.SR2版本,对应的Spri...

    程序那些事
  • java安全编码指南之:对象构建

    程序员肯定是不缺对象的,因为随时都可以构建一个,对象多了肯定会出现点安全问题,一起来看看在java的对象构建中怎么保证对象的安全性吧。

    程序那些事
  • Spring5参考指南:Bean的生命周期管理

    Spring中的Bean是随着Spring容器产生的,当Spring容器关闭的时候,相应的Bean也会消失。当然这个和Bean自身的作用域范围也有关系,但是通常...

    程序那些事
  • laravel model模型处理之修改查询或修改字段时的类型格式案例

    这将在原有的列上添加一列is_admin,这需要通过属性访问时才会获得,如果我们希望在获得数据的时候被一起返回,则还需要append属性

    砸漏
  • 使用nodejs实现OData的batch操作在Marketing Cloud里读取contact信息

    Jerry Wang
  • 使用nodejs实现OData的batch操作在Marketing Cloud里读取contact信息

    Jerry Wang
  • 坚持原创保护,打击游戏雷同抄袭有新招!

    最近,微信颁布小程序原创保护措施,宣布权利人可以通过侵权投诉来维护小程序正当权利了,真是及时雨般的降临~具体保护机制如何?以下为公告原文:

    场景录小程序
  • 坚持原创保护,打击游戏雷同抄袭有新招!

    最近,微信颁布小程序原创保护措施,宣布权利人可以通过侵权投诉来维护小程序正当权利了,真是及时雨般的降临~具体保护机制如何?以下为公告原文:

    场景录小程序
  • 什么是锁?

    说到锁,门闩,密码锁,指纹锁,虹膜识别锁等,在计算机世界中,单机线程没有锁的概念,当有了资源竞争,才有锁的贵爱安出现。表示自己短暂的持有。

    王小明_HIT
  • 使用 ServiceStack 构建跨平台 Web 服务

    本文主要来自MSDN杂志《Building Cross-Platform Web Services with ServiceStack》,Windows Com...

    张善友

扫码关注云+社区

领取腾讯云代金券