Hi eveyone, 我有一个如何比较两个大VO对象是否相等的问题,请大家帮忙,谢谢比如有两个比较大的同一VO对象,里面有大约1000个String类型的字段,我想判断这两个对象是否相等,原则是所有的字段都相等不区分大小写(如果为null的字段视为相等),请问各位有什么好的方法吗?

解决方案 »

  1.   

    重写equal方法。以后直接用equal判断就好了。
      

  2.   

    我想求一个最简单高效的方案,重写equal或者自己写一个compare方法都可以做到,没问题,但需要长篇累牍的把这1000个属性逐个对比,先对比是否都为空,然后再equalsIgnoreCase,我的问题是是否还有其他更好的方案。
      

  3.   

    呵呵,这个事情好办,采用反射机制来做。使用this.class,就可以取出所有字段,同样可以取出另一个对象的所有字段,把字段名称相同的进行比较就OK了,一个循环就搞定。当然是重写equals方法或者另外写一个都可以。
      

  4.   

    每个属性都要写getter方法。在equal里面用反射取字段名,同时调用该字段的getter方法,比较值。就ok了。
      

  5.   

    请问如何判断一个class的field的类型是否为String?
      

  6.   

    发射可以得到field的类型。有了类型,不就可以了么?
      

  7.   

    if(filed.getType()==String.class)
    .....
      

  8.   

    倒,真是服了你,看来楼主没用过Eclipse,source->生成hashcode和equals菜单
      

  9.   


    原则是所有的字段都相等不区分大小写(如果为null的字段视为相等)这个怎么办?查找替换?
      

  10.   

    怪招:
    把两个对象的String变量用StringBuffer串起来,然后比较串起来的String是否相等就可以了 当然你可以采用一些算法,先拿出100个来比较,相等再比较下100个可以使用Reflect来获取全部String类型的属性,自动处理,否则也是很麻烦的
      

  11.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【msn365】截止到2008-06-26 17:22:26的历史汇总数据(不包括此帖):
    发帖数:83                 发帖分:1335               
    结贴数:22                 结贴分:405                
    未结数:61                 未结分:930                
    结贴率:26.51 %            结分率:30.34 %            
    楼主该结一些帖子了
      

  12.   


    Test3 t = new Test3("333");
         Class c = t.getClass();
         Method[] m = c.getDeclaredMethods();
         for(int i=0;i<m.length;i++){
         if(m[i].getReturnType()==String.class){
         try {
    System.out.println(m[i].getName() + "  " +m[i].invoke(t));
    } catch (IllegalArgumentException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    } catch (InvocationTargetException e) {
    e.printStackTrace();
    }
         }
         }