怎么做从未发生过,无用的例外?

时间:2014-08-12 20:15:55

标签: java android character-encoding androidhttpclient

我有这段代码:

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

1 个答案:

答案 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,并保留您的主要代码"抓住干净"。