参考资料:
https://www.cnblogs.com/flying_bat/archive/2008/01/18/1044693.html
概述
do while(false)可以对异常中断的代码做统一处理
例子
原始的代码:
@RequestMapping("/hello")
public Object hello() {
Dto1 d1 = service.func1();
if (d1 == null) {
return Vo.fail(Message.NO_FOUND_MSG);
}
Dto2 d2 = service.func2(d2);
if (d2 == null) {
return Vo.fail(Message.NO_FOUND_MSG);
}
Dto3 d3 = service.func3(d2);
if (d3 == null) {
return Vo.fail(Message.NO_FOUND_MSG);
}
return d3;
}
do while(false)代码:
@RequestMapping("/hello")
public Object hello() {
Dto3 d3 = null;
do {
Dto1 d1 = service.func1();
if (d1 == null) break;
Dto2 d2 = service.func2(d2);
if (d2 == null) break;
d3 = service.func3(d2);
} while(false);
if (d3 == null) {
return Vo.fail(Message.NO_FOUND_MSG);
}
return d3;
}
总结
对比一下列子里的代码, Message.NO_FOUND_MSG
由三次变为了一次。一旦fail的消息换成了另一个消息常量,那么需要修改的地方也由三处变为一处。
这么做有什么好处呢?
目前想不到太多好处。非要说的话,在改代码的时候不容易漏掉修改的地方,review的时候只要review一处就好了。