gpt4 book ai didi

java - 如何从 Java 中的重写方法传播异常

转载 作者:行者123 更新时间:2023-11-29 05:09:22 25 4
gpt4 key购买 nike

终止执行覆盖方法的最佳做法是什么?以下是解释上下文的示例代码:

@Override
protected String doInBackground(String... params) {

URL serverURL = null;
try {
serverURL = new URL((urlString));

} catch (MalformedURLException e) {
e.printStackTrace();
}
...
...

return response.toJSONString();
}

在上面的代码片段中,我被迫捕获 MalformedURLException,所以我使用了 try catch block 。如果发生该异常,我想跳过 catch block 下面的所有代码并传播我将在 catch block 中抛出的相同异常或不同的异常,直到一直到 Main 方法,跳过 catch block 和在所有调用方法中跳过中间的代码。如何做到这一点?

问题是:1) 我无法将 throws 子句添加到方法签名中,因为它已被重写并且基类不允许它。

2)由于方法必须返回一个String,所以我必须在catch block 之后指定return语句。(如果发生异常,我返回什么?)

3) 在 catch block 中使用 System.exit - 正如该论坛上的一些其他帖子所指出的,当您希望代码可重用时,这可能不是一个好的做法。

最佳答案

这种情况下的最佳做法是用 RuntimeException 包装 MalformedURLException:

catch (MalformedURLException ex) {
throw new RuntimeException("Failed constructing URL", ex);
}

理想情况下,您真的很想编辑该方法的 throws 子句,以便它可以容纳任何可能源于覆盖的异常;但由于这在你的情况下是不可能的(根据你的条件),以上对我来说似乎是最合理的。

相关的最佳实践是避免在包装异常之前记录异常。从设计的角度来看,没有必要这样做——调用者已经可以访问原始的 Exception 对象(通过抛出的 RuntimeException 的 getCause() 方法) ) 所以调用者应该决定是否记录它。

关于java - 如何从 Java 中的重写方法传播异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29221569/

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