清单 2. RuntimeException 捕获 bug 模式 —— 不要执行此模式
public void addInstance(String className) { try { Class clazz = Class.forName(className); objectSet.add(clazz.newInstance()); } catch (Exception e) { logger.log("Exception in newInstance", e); } } |
bug 模式通常源自语言的模糊功能或类库;出现此 bug 模式是因为 RuntimeException
扩展了 Exception
,这稍微有点违反常理。对 RuntimeException
捕获的修复非常容易 —— 您需要了解以下问题:首先捕获 RuntimeException
,并在捕获 Exception
之前重新将其抛出,如清单 3 所示。不过,即使知道 bug 模式及其修复方法,在代码审查过程中也很容易忘记执行它或忽略它,并且编译器也不会通知您。这是引入 bug 模式的原因,帮助您避免违犯 “您已较好地了解” 之类的错误。
清单 3. 通过显式处理 RuntimeException 修复 RuntimeException 捕获
public void addInstance(String className) { try { Class clazz = Class.forName(className); objectSet.add(clazz.newInstance()); } catch (RuntimeException e) { throw e; } catch (Exception e) { logger.log("Exception in newInstance", e); } } |