gpt4 book ai didi

java - 有什么方法可以将所有 IOException 包装到 RuntimeException 中吗?

转载 作者:搜寻专家 更新时间:2023-11-01 03:49:21 25 4
gpt4 key购买 nike

我正在使用第三方 REST API,其中每个 API 调用都定义为抛出 IOException。我将 REST API 包装在存储库样式的类中。但是,鉴于 API 接口(interface),我不得不将存储库中的每个方法声明为抛出 IOException,或者包装每个调用并将其作为运行时异常重新抛出。

是否有任何干净的方法来包装整个 API 以捕获/重新抛出我自己的自定义 RuntimeException?我知道我可以使用 AspectJ 包装调用并拦截 IOException,但我对该方法的签名不会改变。

是否有任何技巧可以用来将异常转换为 RuntimeException?

例如:

APIWrapper 接口(interface)有方法:

public String getAppBuilds(String report_changed_since, String only_latest, String include_in_progress) throws IOException

在我的代码库中,我希望能够调用 APIWrapper.getAppBuilds() 而无需捕获 IOException。

最佳答案

唯一的可能性是捕获 Exception 并将其转换为 RuntimeException,就像 SpringJDBC 一样。

基本上是这样

public class OriginalLibrary {
public void method1() throws IOException {
...
}
}

public class LibraryWithoutException {
private OriginalLibrary original;

public LibraryWithoutException(OriginalLibrary original) {
this.original = original;
}

public void method1() {
try {
original.method1();
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
}
}

注意:最好创建自定义 RuntimeException 而不是使用标准类。

或者使用你的 api:

public class APIWrapperNoException {
private APIWrapper api;

public APIWrapperNoException(APIWrapper api) {
this.api = api;
}

public String getAppBuilds(String report_changed_since,
String only_latest,
String include_in_progress) {
try {
return api.getAppBuilds(report_changed_since,
only_latest, include_in_progress);
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
}
}

关于java - 有什么方法可以将所有 IOException 包装到 RuntimeException 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32721120/

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