今天写了段很挫的代码, 简单的来说就是这样:
public static void main(String[] args) { try { throwNewException(); } catch (Exception e) { System.out.println(e); System.out.println(e.getMessage()); } } private static void throwNewException() { Object test = null; // simulate the Spring injection Error. test.getClass(); throw new RuntimeException("UserName cannot be empty."); }
简直就是奇葩, 在做UnitTest时, 其中一个用例是throwNewException throw RuntimeException,
由于Spring注入失败, 导致抛出NullPointerException, 而后续代码依赖于RuntimeException的ErrorMesg, 一直拿不到ErrorMesg. 纠结半天, 原因如下:
1. 懒. 使用RuntimeException而不是创建对应的Exception类型;
2. 懒. 在Catch时, catch了Exception, 而且没有打印Exception, 也就是说, 拦截并隐藏了所有Exception!
3. 懒. Debug时懒得思考, 看到如下的输出:
java.lang.NullPointerException
null
就得出结论, Exception是Null的! WTF!! 然后就开始纠结是不是Spring的问题…
所以,
创建Exception类型, Capture具体Exception具体处理, 处理或是继续抛出Exception, 而不是隐藏,.
// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.