gpt4 book ai didi

java - 用于异常包装的 DRY

转载 作者:行者123 更新时间:2023-12-04 05:24:31 25 4
gpt4 key购买 nike

我正在处理一些服务器端代码,在将它们传递给客户端之前包装所有异常,因此所有面向客户端的方法都有以下代码

try{
DoSomething();
} catch (ExceptionA e) {
throw new CustomException(AType, e);
} catch (ExceptionB e) {
throw new CustomException(BType, e);
} catch (Exception e) {
throw new CustomException(Unexpected, e);
}

在每种方法中重复这一点似乎违反了 DRY 原则,我想知道重构它的最佳方法是什么。例如,我正在考虑一种包装方法,例如:
private void wrapException(Exception e) {
if (e instanceof ExceptionA) {
throw new CustomException(AType, e);
}
etc...

最佳答案

看看 AspectJ 软化异常。

另请查看 Guava 的 Throwables。

也有兰博斯偷偷摸摸的异常(exception)。

另一种选择是使用匿名对象实例又名闭包。

public abstract class Wrapper {
public void execute() {
try {
// do some boiler plate before
this.wrap();
// do some boiler plate after.
} catch (ExceptionA | ExceptionB ex) {
Type t = determineType(ex);
throw new CustomException(t, ex);
}
}
public void abstract wrap();
}

现在在您的代码中,您可以执行以下操作:
new Wrapper() {
public void wrap() {
DoSomething();
}
}.execute()

关于java - 用于异常包装的 DRY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13359490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com