两个java 类如何动态比较的问题

在程序开发的过程中总是碰到需要简单动态执行比较的情况,也就是将比较方式作为参数的情况
如:

public class DynamicComparor{
 public enum OP{//六种比较方式enum
  less, lessequal, equal, greatequal, great, notequal
 }
 //执行比较, 判断a与b的比较是否符合比较方式要求
 public boolean execute(OP op, Comparable a, Object b){ 
  int k = 0;
   if(a==null&&b!=null){
    k=-1;
   }else{
    k = a.compareTo(b);
   }
  switch(op){//在这里得对每一个比较方式都得执行一遍判断
  case less:
 if(k < 0)return true;
 return false;
  case lessequal:
 if(k < 0)return true;
 if(k == 0)return true;
 return false;
  case equal:
 if(k == 0)return true;
 return false;
  case great:
   ......
  }
  return false;
 }
 
}


以上的程序需要对每一种比较方式都单独处理,但是每一种比较都是相似的,
这个处理看起来不怎么优雅,有重复的代码
那么有没有一种办法能够让代码没有那么多重复的代码而且效率一样好呢?
有,这个方法就是将比较拆分,单独比较大于、等于和小于三种情况,
然后综合起来就能得到比较的结果了,如何比较,请看下面的代码:

package cn.lancy.util.dynamic;

/*
*一个用于动态比较的比较符号enum
*/
public enum CompareOperator{
  less      (true,  false, false), //小于
  lessequal (true,  true,  false), //小于等于
  equal     (false, true,  false), //等于
  greatequal(false, true,  false), //大于等于
  great     (false, false, true),  //大于
  notequal  (true,  false, true);  //不等于
  private boolean isNotLess = false;
  private boolean isNotEqual = false;
  private boolean isNotGreat = false;
  //私有的构造函数, 有三个参数,均为boolean类型
  //实际上是将每一种比较符分解为三种基本比较
  //不大于,不等于,不小于  
  private CompareOperator(boolean isLess, boolean isEqual, boolean isGreat){
   this.isNotLess = !isLess;
   this.isNotEqual = !isEqual;
   this.isNotGreat = !isGreat;
  }
  //执行比较的方法,
  public boolean execute(Comparable a, Object b){
   //获得比较值
   int k = -1;
   if(a==null){
    if(b==null)k=0;
   }else{
    k = a.compareTo(b);
   }
   //执行比较,如果k值与基本比较要求的不一致,
   //则不符合本比较的条件,返回false
   if(this.isNotLess && k < 0)return false;
   if(this.isNotEqual && k == 0)return false;
   if(this.isNotGreat && k > 0)return false;
   //只有完全通过了这三次基本比较要求,那么才算通过了本方式的比较
   return true;
  }
 }


使用方式如下:

  Integer a = 100, b= 200;
  for(CompareOperator comparor: CompareOperator.values()){
    System.out.println(comparor.name() + "  ==>  " + comparor.execute(a, b));
  }


执行将返回:
less  ==>  true
lessequal  ==>  true
equal  ==>  false
greatequal  ==>  false
great  ==>  false
notequal  ==>  true


如此则代码中不存在重复代码,而比较的方式可以在程序中随意设定

(今日开张,以此为纪:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值