首页 > 解决方案 > 记录大 if(.. || ..) 语句的真实条件

问题描述

我使用 Java,我想在日志中确定哪个语句导致条件为真。如果有很多 OR,我会变得很大。如下所示:

if (StringUtils.isTrue(foo.getArg1)
    || StringUtils.isTrue(foo.getArg1)
    || StringUtils.isTrue(foo.getArg2)
    || foo.getArg3.equals("T")
    || foo.getList1.isEmpty()
    || //and so on...) {
       return true; }

我想得到类似的东西:

if (StringUtils.isTrue(foo.getArg1)) {
   log.info("Arg1 made statement true")
          return true;
   }

if (StringUtils.isTrue(foo.getArg2)) {
   log.info("Arg2 made statement true")
          return true;
   }

if (foo.getList1().isEmpty()) {
   log.info("List1 made statement true")
          return true;
   }   //etc...

是否有任何棘手的方法可以以更通用的方式实现这样的效果,而无需大量 if 语句?

标签: javaspring

解决方案


boolean如果传递给它的是,您可以有一个辅助记录器方法将给定消息写入日志true

public boolean static logIfTrue (boolean value, String msg) {
    if (value) {
        log.info(msg);
    }
    return value;
}

并使用它:

return logIfTrue(StringUtils.isTrue(foo.getArg1),"Arg1 made statement true") ||
       logIfTrue(StringUtils.isTrue(foo.getArg2),"Arg2 ...") ||
       logIfTrue(foo.getArg3.equals("T"),"...") ||
       logIfTrue(foo.getList1.isEmpty(),"...") ||
       //and so on...;

推荐阅读