编辑:这个问题只涉及
Java 1.6(及以下).抱歉没有在原帖中说清楚.
层次结构here显示Java异常分为两种类型:RuntimeException而不是RuntimeException:
我可能错过了一些东西,但是分成UncheckedException和CheckedException之类的东西不是更好吗?例如,以下语句具有相当多的已检查异常:
try { transaction.commit(); } catch (SecurityException e) { } catch (IllegalStateException e) { } catch (RollbackException e) { } catch (HeuristicMixedException e) { } catch (HeuristicRollbackException e) { } catch (SystemException e) { }
我只是真的对它是成功还是失败感兴趣所以想要将已检查的异常作为一个组来处理,而不是未经检查的异常,因为捕获意外错误不是好的做法.所以考虑到这一点,也许我可以这样做:
try { transaction.commit(); } catch (Exception e) { if (e instanceof RuntimeException) { // Throw unchecked exception throw e; } // Handle checked exception // ... }
但这看起来非常糟糕.有没有更好的办法?
解决方法
如果我理解正确,那么你几乎就在那里.抓住RuntimeException.这将捕获RuntimeException及其下层的所有内容.然后是Exception的一个漏洞,你就被覆盖了:
try { transaction.commit(); } catch (RuntimeException e) { // Throw unchecked exception throw e; } catch (Exception e) { // Handle checked exception // ... }