热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

JavathrowException实现异常转换

这篇文章主要介绍了JavathrowException实现异常转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

简介

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

我们是这样做的:

  static  Consumer consumerWrapper(
      ThrowingConsumer 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  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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 探索PWA H5 Web App优化之路(Service Worker与Lighthouse的应用)
    本文探讨了如何通过Service Worker和Lighthouse工具来优化PWA H5 Web App,旨在提升用户体验,包括提高加载速度、增强离线访问能力等方面。 ... [详细]
  • databasesync适配openGauss使用指导书
    一、database-sync简介database-sync作为一种开源辅助工具,用于数据库之间的表同步,更确切的说法是复制,可以从一个数据库复制表到另一个数据库该工具支持的功能如 ... [详细]
  • Python图像处理库概览
    本文详细介绍了Python中常用的图像处理库,包括scikit-image、Numpy、Scipy、Pillow、OpenCV-Python、SimpleCV、Mahotas、SimpleITK、pgmagick和Pycairo,旨在帮助开发者和研究人员选择合适的工具进行图像处理任务。 ... [详细]
  • 每位开发者都应该拥有一个展示自我技能与分享知识的空间——个人技术博客。本文将指导你如何使用静态网站生成器Hexo结合GitHub Pages搭建这样一个平台。 ... [详细]
  • APP数据包捕获挑战
    本文探讨了在使用Burp Suite捕获移动应用数据包时遇到的两大难题,尤其是SSL Pinning安全机制的影响,并提供了一种解决方案。 ... [详细]
  • 本文基于https://major.io/2014/05/13/coreos-vs-project-atomic-a-review/的内容,对CoreOS和Atomic两个操作系统进行了详细的对比,涵盖部署、管理和安全性等多个方面。 ... [详细]
  • 使用Docker部署Gitea自托管Git服务
    Gitea是由Gogs社区分叉而来的开源自托管Git服务,旨在提供一个更加灵活和易于维护的解决方案。本文将详细介绍如何利用Docker容器技术快速部署Gitea。 ... [详细]
  • Iris 开发环境配置指南 (最新 Go & IntelliJ IDEA & Iris V12)
    本指南详细介绍了如何在最新的 Go 语言环境及 IntelliJ IDEA 中配置 Iris V12 框架,适合初学者和有经验的开发者。文章提供了详细的步骤说明和示例代码,帮助读者快速搭建开发环境。 ... [详细]
  • WorldWind源代码解析:瓦片调度机制详解
    本文深入探讨了WorldWind项目中的关键组件——瓦片调度策略。通过源代码分析,我们将了解摄像头移动时如何动态调整瓦片的加载与卸载,确保地图渲染的高效与流畅。 ... [详细]
  • scrapyredis分布式爬虫 ... [详细]
  • 深入探讨配置文件的管理与优化
    尽管配置文件的重要性不言而喻,但其管理和安全性问题却常被忽视。本文将详细讨论配置文件的不同管理策略及其优缺点。 ... [详细]
  • 本文档详细介绍了在Vue2项目中集成Vant v2组件库的方法,包括安装步骤、版本选择以及如何参考官方文档进行开发。同时提供了其他常用Vue组件库的链接,供开发者对比选择。 ... [详细]
  • 使用H5在前端生成Excel文件的方法
    本文介绍了一种利用HTML5和JavaScript库在浏览器端直接生成并下载Excel文件的技术方案。通过引入alasql.js和xlsx.core.min.js两个库,可以轻松实现数据导出功能。 ... [详细]
  • 十大排序算法JavaScript实现总结
    十大排序算法JavaScript实现总结,Go语言社区,Golang程序员人脉社 ... [详细]
  • Linux 5.3内核正式发布并标记为稳定
    知名Linux内核开发者Greg Kroah-Hartman宣布,最新的Linux 5.3内核已正式标记为稳定版本,适用于大规模部署。该版本带来了多项新特性和改进,包括对最新硬件的支持和性能优化。 ... [详细]
author-avatar
z1996y
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有