2008-04-09

又一个Java窍门

关键字: trick, tip

作者的想法很简单,目的就是在return之前,以日志的形式将返回的信息打印出来。实现这个功能并不难,不过处理得非常巧妙得当(见修改后的代码)。

 

boolean method() {
      if (conditionA)
          return resultA;

      if (conditionB)
          return resultB;

      if (conditionC)
          return resultC;
}

改写后的代码如下:

boolean method() {
      boolean result = false;
       
      try {
          if (conditionA)
            return (result = resultA);
       
          if (conditionB)
            return (result = resultB);
      
          if (conditionC)
            return (result = resultC);
      }
      finally {
          log(result)
      }
}

 

原文链接:

Yet Another Java Trick

 

评论
Godlikeme 2008-04-14

public static X log(X arg) {
logItSomehow(arg);
return arg;
}

boolean method() {
if (conditionA) return log(resultA);
if (conditionB) return log(resultB);
if (conditionC) return log(resultC);
}




In the following comments, This one should be a better trick.
Godlikeme 2008-04-14
另外如果 ConditionA类似的地方有可能跑出异常,log的结果也是错误的,因为方法并没有正常的返回,而log确记录下result的值为false。实际在调用方法拿到的结果是由方法的具体代码决定的
例如调用方法这样些
boolean result =true;
try{
  result =method();
}catch(Exception e){
   //handle exception
}
System.out.println(result);


实际method并没有返回给调用它的方法false的结果,而log却记录下来为false.

我是感觉没有必要强制在method里log result,因为它并不一定是真正的返回值。
而是在调用它的地方来输出。或者在method的里面直接赋值给result,log后return result.

有点钻牛角尖了。呵呵
Godlikeme 2008-04-14
这段代码在Eclipse里面是编辑器会报错的。
发表评论

您还没有登录,请登录后发表评论

numenzq
搜索本博客
存档
最新评论