gpt4 book ai didi

java - 如何处理从未发生的、无用的异常?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:36 25 4
gpt4 key购买 nike

我有这个代码:

HttpPut put = new HttpPut(url);
try {
put.setEntity(new StringEntity(body, "UTF-8"));
} catch (UnsupportedEncodingException e1) {
// That would really not be good
e1.printStackTrace();
}

在已知支持该编码的平台上。

永远不会引发异常。我永远不会对此做任何事情。

代码仍然存在的事实表明它有可能发生,并且其余代码可能在不可靠的状态下执行。但它永远不会。或者,如果确实如此,优雅的网络连接回退是我的最后一个问题。

所以我有这个丑陋无用的 try catch block 。我应该用它做什么?

(在这种特定情况下,如果我想使用 StringEntity,没有太多其他选择。例如,String.getBytes 有很多方法可以接受Charset 对象,例如,避免捕获异常的需要,但不是 StringEntity)

最佳答案

我会抛出某种 RuntimeException 表明您认为这真的不应该发生。这样:

  • 如果它确实发生了,您会发现它而不是吞下它并继续
  • 您对它真的可能永远不会发生的预期已明确记录在案

您甚至可以为此创建自己的 RuntimeException 子类:

// https://www.youtube.com/watch?v=OHVjs4aobqs
public class InconceivableException extends RuntimeException {
public InconceivableException(String message) {
super(message);
}

public InconceivableException(String message, Throwable cause) {
super(message, cause);
}
}

您可能希望将操作封装到一个单独的方法中,这样就不会在您的代码中出现这样的 catch block 。例如:

public static HttpPut createHttpPutWithBody(String body) {
HttpPut put = new HttpPut(url);
try {
put.setEntity(new StringEntity(body, "UTF-8"));
return put;
} catch (UnsupportedEncodingException e) {
throw new InconceivableException("You keep using that encoding. "
+ "I do not think it means what you think it means.", e);
}
}

然后您可以在任何需要的地方调用 createHttpPutWithBody,并保持您的主要代码“干净利落”。

关于java - 如何处理从未发生的、无用的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25273331/

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