但是我不想用try/catch块来包围声明!

Ril*_*ark 20 java exception try-catch

我正在编写一个使用的程序java.net.URLDecoder.decode(String value, String encoding).显然,这种方法可能会抛出一个UnsupportedEncodingException,我得到了.但我只是传递"UTF-8"作为编码.它不会抛出该异常.

我可以只围绕一个catch块,什么也不做的混账东西,但随后在任何情况下,怪物不会导致抛出异常,我不会发现它.我也不想创建一个throws UnsupportedEncodingException直到我的程序顶部的大型链.

我能在这做什么?为什么我不得不处理一些例外情况,而其他人(例如IllegalArgumentException,NullPointerException)我允许忽略?

Yis*_*hai 25

我认为你需要更好地掌握已检查的例外情况及其目的,但这是另一个问题和答案.在这种情况下,您所做的是:

 try {
      //etc.
 } catch (UnsupportedEncodingException e) {
      throw new RuntimeException(e.getMessage(), e);
 }
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案很好,因为它明确表示如果在此上下文中抛出了已检查的异常UnsupportedEncodingException,则应将其解释为bug(因此也是致命的). (8认同)
  • 在这里挑剔:JVM规范明确要求支持UTF8.如果它不支持UTF8,则它不是JVM.因此,`AssertionError`比普通的`RuntimeException`更合适. (7认同)
  • +1.但是请注意:这假设您认为UnsupportedEncodingException对当前Thread至关重要.否则,如果您的程序正在输出日志记录信息,则可以始终使用适当的级别进行日志记录. (3认同)
  • +1我的代码充满了这段代码.这很乏味,但这是必要的.比让异常在堆栈中冒泡好多了. (2认同)