参考资料:

https://www.cnblogs.com/flying_bat/archive/2008/01/18/1044693.html

概述

do while(false)可以对异常中断的代码做统一处理

例子

原始的代码:

  1. @RequestMapping("/hello")
  2. public Object hello() {
  3. Dto1 d1 = service.func1();
  4. if (d1 == null) {
  5. return Vo.fail(Message.NO_FOUND_MSG);
  6. }
  7. Dto2 d2 = service.func2(d2);
  8. if (d2 == null) {
  9. return Vo.fail(Message.NO_FOUND_MSG);
  10. }
  11. Dto3 d3 = service.func3(d2);
  12. if (d3 == null) {
  13. return Vo.fail(Message.NO_FOUND_MSG);
  14. }
  15. return d3;
  16. }

do while(false)代码:

  1. @RequestMapping("/hello")
  2. public Object hello() {
  3. Dto3 d3 = null;
  4. do {
  5. Dto1 d1 = service.func1();
  6. if (d1 == null) break;
  7. Dto2 d2 = service.func2(d2);
  8. if (d2 == null) break;
  9. d3 = service.func3(d2);
  10. } while(false);
  11. if (d3 == null) {
  12. return Vo.fail(Message.NO_FOUND_MSG);
  13. }
  14. return d3;
  15. }

总结

对比一下列子里的代码, Message.NO_FOUND_MSG 由三次变为了一次。一旦fail的消息换成了另一个消息常量,那么需要修改的地方也由三处变为一处。

这么做有什么好处呢?
目前想不到太多好处。非要说的话,在改代码的时候不容易漏掉修改的地方,review的时候只要review一处就好了。