et游戏自动翻译工具_ET的异常翻译

et游戏自动翻译工具

前段时间,我写了一篇有关用AspectJ进行异常转换的小博客文章。 在此博客文章中,我们将看到如何使用ET及其更轻松的Java 8方法来实现相同的目的。

动机

异常转换(或异常转换)是将一种类型的异常转换为另一种类型的过程。

转换异常的Java代码非常简单,我认为每个Java开发人员都会不时编写如下代码:

try {// code that can throw FooException
} catch(FooException e) {// convert FooException to BarExceptionthrow new BarException(e);
}

如果第三方库中的异常不适合您的应用程序,则通常会应用异常转换。 其原因可能是:

  • 库引发的异常级别太低和/或您不想将实现细节泄漏到应用程序的其他部分。 例如,您要使用更通用的DataAccessException而不是较低级别SQLException。
  • 库正在使用检查的异常,而您更喜欢在应用程序中仅使用运行时异常。

ET的异常翻译

ET是一个小型且简单的异常翻译库。 要开始使用ET,您只需向代码添加以下依赖项:

<dependency><groupId>com.mscharhag</groupId><artifactId>et</artifactId><version>0.2.0</version>
</dependency>

ET利用Java 8功能,因此不要忘记将编译器级别设置为Java 8。

我们从配置ExceptionTranslator实例开始:

ExceptionTranslator et = ET.newConfiguration().translate(IOException.class).to(MyRuntimeException.class)        .translate(FooException.class, BarException.class).to(BazException.class).done()

在这里,我们创建一个ExceptionTranslator来转换IOExceptionFooExceptionBarExceptionIOException将转换为MyRuntimeExceptionFooExceptionBarException将转换为BazException

请注意,ET要求转换目标异常(此处为MyRuntimeExceptionBazException )为RuntimeExceptions

ExceptionTranslator实例是线程安全的且不可变的。 只需配置一次ExceptionTranslator ,然后使其全局可用就可以了。

现在,我们可以使用新的ExceptionTranslator包装可以引发我们要转换的异常的代码。

et.withTranslation(() -> {// can throw IOException, FooException and/or BarExceptionmyObject.dangerOperation(); 
});

如果现在dangerOperation() et引发IOException ,它将捕获它。 et再抛出一个新MyRuntimeException从抓IOException 。 原始IOException存储在MyRuntimeExceptioncause字段中。

要使用withReturningTranslation()从转换块返回值,可以使用:

MyResultClass data = et.withReturningTranslation(() -> {...return myObject.dangerOperation(); 
});

摘要

如果您必须在代码中执行大量异常转换,那么ET是一个小型库,可能对您有用。 一次配置转换规则后,只需将代码包装在lambda表达式中即可转换异常。

查看GitHub上的完整ET文档 。

翻译自: https://www.javacodegeeks.com/2015/06/exception-translation-with-et.html

et游戏自动翻译工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

同步代码和异步代码_告别异步代码

同步代码和异步代码Quasar是一个将真正的轻量级线程&#xff08;纤维&#xff09;添加到JVM的库。 它们非常便宜且非常快-实际上&#xff0c;光纤的行为就像Erlang进程或Go goroutines-并允许您编写简单的阻塞代码&#xff0c;同时享受与复杂异步代码相同的性能优势。 在本文中…

java socket 传送进度_java-★-Socket文件上传/进度条

客户端代码&#xff1a;1、客户端运行程序&#xff1a;package wtb.khd;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.OutputStream;import …

c语言中typedef和define的区别

点击上方蓝字关注我&#xff0c;了解更多咨询1、typedef仅限于为类型定义符号名称。define不仅可以为类型定义别名&#xff0c;还可以为数值定义别名。例如&#xff0c;可以将1定义为ONE。2、typedef由编译器解释&#xff0c;define语句由预编译器处理。实例#include <stdio…

c语言中预处理器是什么?

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言有预处理器&#xff0c;Java中没有这个概念&#xff0c;其实只是文本替换工具。2、C的预处理器&#xff0c;即CPP&#xff0c;将在实际编译器中完成处理&#xff0c;所有预处理命令将从#开始。实例#include <stdio.h>…

java缓存同步_浅谈JSON的数据交换、缓存问题和同步问题

JSON轻量级的数据交换格式相对于XML来说&#xff0c;JSON的解析速度更快&#xff0c;文档更小。JSON的格式{属性名:属性值,属性名:属性值,……}属性名的类型可以是string,number,boolean,null,object,且属性名必须用双引号引起来&#xff0c;如果属性值是字符串&#xff0c;也必…

垃圾回收算法以及垃圾回收器_什么是垃圾回收?

垃圾回收算法以及垃圾回收器以下是我们的垃圾收集手册中的一个示例&#xff0c;该手册将在接下来的几周内发布。 同时&#xff0c;花点时间熟悉垃圾收集的基础知识-这将是本书的第一章。 乍一看&#xff0c;垃圾收集应该处理顾名思义的问题–查找并丢弃垃圾。 实际上&#xff…

c语言中fgetc函数的介绍

点击上方蓝字关注我&#xff0c;了解更多咨询1、fgetc函数返回的字符实际上是文件流中位置指针指向的字符。当fgetc函数读取错误时&#xff0c;返回EOF并设置文件错误标志位。2、该函数以无符号char强制转换为int的形式返回读取的字符&#xff0c;如果到达文件末尾或出现读错&a…

java中什么表示打印_在java中打印对象时会发生什么

您不需要调试器就能知道发生了什么.System.out是PrintStream类型.PrintStream.println(Object)的javadoc说&#xff1a;Prints an Object and then terminate the line. This method calls at first String.valueOf(x) to get the printed object’s string value, then behave…

魔术笔反选_魔术二传手反图案

魔术笔反选设置者和获取者是邪恶的。 创建JavaBean定义时&#xff0c;这似乎是个好主意。 但是它们对Java社区造成了很大的伤害。 通常不如null指针那么多&#xff0c;但足够了。 首先&#xff0c;许多初级人员相信实现setter和getter&#xff08;嘿&#xff0c;在Eclispe中只…

花5分钟了解C语言基本语法元素快来

点击上方蓝字关注我&#xff0c;了解更多咨询C语言是一种编程语言&#xff0c;和其它语言一样&#xff0c;也定义了自己的语法和词汇。学习C语言&#xff0c;首先要学习C语言的词汇&#xff0c;再学习C语言的语法规则&#xff0c;然后由词汇构成语句&#xff0c;由语句构成源程…

java8 策略模式_Java 8中的策略模式

java8 策略模式这是两个有关如何使用Java 8功能样式以及Cyclops模式匹配和Hamcrest库来实现策略模式设计的示例。 PrintDependingOnInput方法是一种策略&#xff0c;该策略将根据传递的日志对System.println一些消息。 AddPrefix是另一种策略&#xff0c;它将根据邮件内容向邮…

c语言中ftell函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言函数ftell用于获取文件位置指针当前位置相对于文件首的偏移字节数。2、通过ftell函数获取当前文件的大小&#xff0c;然后通过fread函数读取缓冲区。返回值&#xff0c;如果成功&#xff0c;该函数返回位置标识符的当前值&a…

jdk入门_JDK 9 REPL:入门

jdk入门会议是聚会Java名人的好地方。 Devoxx France是与Java语言架构师&#xff0c;前同事和老朋友Brian Goetz&#xff08; briangoetz &#xff09;见面的一个机会。 我们谈论了JDK 9&#xff0c;而他全都热衷于REPL。 他提到&#xff0c;尽管Java SE 9中有很多重要功能 &am…

c语言中局部变量是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、函数内部定义的变量称为局部变量&#xff0c;其作用域仅限于函数内部&#xff0c;离开函数后无效&#xff0c;使用后报错。2、局部变量只能在函数内部使用&#xff0c;离开函数后无效&#xff0c;再次使用会报错。实例#include &…

java接口自动化Excel占位符_基于maven+java+TestNG+httpclient+poi+jsonpath+ExtentReport的接口自动化测试框架...

接口自动化框架项目说明本框架是一套基于mavenjavaTestNGhttpclientpoijsonpathExtentReport而设计的数据驱动接口自动化测试框架&#xff0c;TestNG 作为执行器&#xff0c;poi用于读取存放于excel的接口用例&#xff0c;jsonPath用于校验返回值&#xff0c;以及提取返回值。本…

本地构建和自动化构建_构建自动化面板

本地构建和自动化构建上周二&#xff0c;我作为持续讨论&#xff08;&#xff03;c9d9&#xff09;的一部分&#xff0c;参加了一个关于Build Automation主题的在线讨论会&#xff0c;这是一系列有关敏捷&#xff0c;持续交付和DevOps的社区讨论会。 自动化构建流程面临许多挑战…

C语言为什么要定义short,int,long这么多整数类型?

点击上方蓝字关注我&#xff0c;了解更多咨询整数类型有int、short int、long int三种类型&#xff0c;用于需要不同存储空间的整数使用。整数类型有正整数和负整数之分&#xff0c;在C语言中&#xff0c;规定整型的最高位为符号位&#xff0c;最高位为“0”表示正数&#xff0…

java中逗号怎么加_Java中如何将字符串从右至左每三位加一逗号

/*** * 将字符串从右至左每三位加一逗号* ** param str 需要加逗号的字符串* return 以从右至左每隔3位加一逗号显示*/public static String displayWithComma(String str){str new StringBuffer(str).reverse().toString(); // 先将字符串颠倒顺序String str2 "";…

小度拆卸_拆卸invokedynamic

小度拆卸许多Java开发人员认为JDK的第七版有些令人失望。 从表面上看&#xff0c;仅少数语言和库扩展使它成为了发行版&#xff0c;即Project Coin和NIO2 。 但在幕后&#xff0c;该平台的第七个版本对JVM类型系统进行了最大的扩展&#xff0c;这是其最初发行后引入的。 添加in…

c语言中函数参数类型的探究

点击上方蓝字关注我&#xff0c;了解更多咨询函数中的参数个数可以是0&#xff0c;也可以是一个或多个参数。下面我们带着这三种不同的情况&#xff0c;分别在c语言中进行讨论。1、函数没有参数&#xff0c;表示没有参数列表。int func1(); //声明一个函数&#xff0c;该函数…