代码之家  ›  专栏  ›  技术社区  ›  Epaga Alex Reynolds

抑制捕获或抛出永远不会发生的异常?

  •  6
  • Epaga Alex Reynolds  · 技术社区  · 15 年前

     String encodedString = URLEncoder.encode(foo, "utf-8");
    

    此方法引发 UnsupportedEncodingException

    /** @throws UnsupportedEncodingException umm...never
     */
    public void myMethod() throws UnsupportedEncodingException {
       ...
       String encodedString = URLEncoder.encode(foo, "utf-8");
       ...
    }
    

    (强迫来电者自己接电话)或:

    public void myMethod() {
       try {
         ...
         String encodedString = URLEncoder.encode(foo, "utf-8");
         ...
       catch(UnsupportedEncodingException e) {
          Logger.log("cosmic ray detected!");
       }
    
    }
    

    或者有没有一种更优雅的方法来处理不可能真正发生的异常?

    2 回复  |  直到 15 年前
        1
  •  18
  •   simonlord    15 年前

    从不说不;)

    在上面的示例中,您可以始终捕获异常,然后抛出RuntimeException:

    public void myMethod() {
       try {
          ...
          String encodedString = URLEncoder.encode(foo, "utf-8");
           ...
       } catch(UnsupportedEncodingException e) {
         throw new RuntimeException("This should not be possible",e);
       }
    
    }
    

    HTH公司

        2
  •  6
  •   polygenelubricants    15 年前

    如果你能保证这个异常永远不会发生 ,那么最好将这个断言局限在最窄的范围内,而不是让它传播,因为其他人不看文档可能不会意识到这一点。

    throws 条款和 简化API

    您应该始终抛出适合您的抽象级别的异常( ,第61项)。声明你可能会扔东西,当它保证永远不会发生,打破了这个设计准则。