论坛首页 入门技术论坛

你会犯这个失误吗??还有更好的重构吗??

浏览 6452 次
该帖已经被评为新手帖
作者 正文
   发表时间:2012-03-30   最后修改:2012-03-31

 

if(saleOrderList.size() > 0 && saleOrderList.get(0).getOrderUuid() > 0 & saleOrderList.get(0).getOrder().getState() == OrderStateEnum.wait_pay) {
            ActionContext.getContext().put("orderUuid", saleOrderList.get(0).getOrderUuid());
            return "redirectToPay";
}

 

 

前提:

1、saleOrderList.get(0).getOrderUuid() 如果 等于 0  表示 没有订单  ,,,即  saleOrderList.get(0).getOrder() 将返回null

 

 

先别看答案,,看看嘛失误?????????

 

我犯的失误::::

 

saleOrderList.get(0).getOrderUuid() > 0 & saleOrderList.get(0).getOrder().getState() == OrderStateEnum.wait_pay

 

用了 &  而不是 &&

 

位与 "&" 是 非短路的

 

逻辑与 "&&" 是短路的 

 

 

======================重构代码为如下形式===============

 

private boolean canPay(saleOrderList) {
    if(saleOrderList == null || saleOrderList.size() == 0) {
       return false;
   }

   SaleOrderModel saleOrder = saleOrderList.get(0);

   if( saleOrder .getOrderUuid() <= 0 ) {
      return false;
  }

   if( saleOrder.getOrder().getState() != OrderStateEnum.wait_pay) {
      return false;
   }

   return true;
}
 

这样效果更佳

 

还有更好的重构吗??欢迎拍砖

   发表时间:2012-03-30  
还是python用and写着不容易错
0 请登录后投票
   发表时间:2012-03-30  
dieslrae 写道
还是python用and写着不容易错


这个真是不小心 写错的  以前从没错过  找了老半天  

 
0 请登录后投票
   发表时间:2012-03-30   最后修改:2012-03-30
如果saleOrderList == null 你就悲剧了
0 请登录后投票
   发表时间:2012-03-30  
兜兜毛毛 写道
如果saleOrderList == null 你就悲剧了


这个倒不会 肯定不为null 哈哈哈
0 请登录后投票
   发表时间:2012-03-30  
你这判断有问题,应该先判断null,不判断size==0!!
0 请登录后投票
   发表时间:2012-03-30  
看到楼主这代码, 哎、、、、、   初级程序员啊
0 请登录后投票
   发表时间:2012-03-30  
一眼看到那个&...
0 请登录后投票
   发表时间:2012-03-30  
很少用&  一般不会写少, 证明你写代码不够细心。
就算写错吧, DEBUG还是能找到问题啊, 证明你DEBUG用的比较少, 你这个DEBUG 调试了吗? 看不出来?
0 请登录后投票
   发表时间:2012-03-30  
if(saleOrderList.size() > 0 && saleOrderList.get(0).getOrderUuid() > 0 & saleOrderList.get(0).getOrder().getState() == OrderStateEnum.wait_pay) {  
            ActionContext.getContext().put("orderUuid", saleOrderList.get(0).getOrderUuid());  
            return "redirectToPay";  
} 


=================================
你的这段代码好乱啊!

if(saleOrderList.size()>0) {

    SaleOrder order = saleOrderList.get(0);

    int uuid = order.getOrderUuid();

    if(uuid > 0 && order.getOrder().getState() == OrderStateEnum.wait_pay) {

             ActionContext.getContext().put("orderUuid", uuid); 
            return "redirectToPay";

    }

}

-------------------------这样整理一下代码不是更好吗?------^_^----------------

0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics