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
来转换IOException
, FooException
和BarException
。 IOException
将转换为MyRuntimeException
而FooException
和BarException
将转换为BazException
。
请注意,ET要求转换目标异常(此处为MyRuntimeException
和BazException
)为RuntimeExceptions
。
ExceptionTranslator
实例是线程安全的且不可变的。 只需配置一次ExceptionTranslator
,然后使其全局可用就可以了。
现在,我们可以使用新的ExceptionTranslator
包装可以引发我们要转换的异常的代码。
et.withTranslation(() -> {// can throw IOException, FooException and/or BarExceptionmyObject.dangerOperation();
});
如果现在dangerOperation()
et
引发IOException
,它将捕获它。 et
再抛出一个新MyRuntimeException
从抓IOException
。 原始IOException
存储在MyRuntimeException
的cause
字段中。
要使用withReturningTranslation()
从转换块返回值,可以使用:
MyResultClass data = et.withReturningTranslation(() -> {...return myObject.dangerOperation();
});
摘要
如果您必须在代码中执行大量异常转换,那么ET是一个小型库,可能对您有用。 一次配置转换规则后,只需将代码包装在lambda表达式中即可转换异常。
查看GitHub上的完整ET文档 。
翻译自: https://www.javacodegeeks.com/2015/06/exception-translation-with-et.html
et游戏自动翻译工具