我有这段代码:
HttpPut put = new HttpPut(url);
try {
put.setEntity(new StringEntity(body, "UTF-8"));
} catch (UnsupportedEncodingException e1) {
// That would really not be good
e1.printStackTrace();
}
在已知支持该编码的平台上。
永远不会提出异常。我永远不会做任何事情。
代码仍存在建议这一事实可能会发生,并且其余代码可能会以不可靠的状态执行。但它永远不会。或者如果是这样,优雅的网络连接后备是我的最后一个问题。
所以我有这个丑陋无用的尝试catch块。我该怎么办呢?
(在这种特定情况下,如果我想使用StringEntity
,则没有太多其他选择。例如String.getBytes
有一堆接受Charset
对象的方法,实例,避免捕获异常,但不是StringEntity
)
答案 0 :(得分:11)
我会抛出某种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块。例如:
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
,并保留您的主要代码"抓住干净"。