日期:2014-05-17  浏览次数:20759 次

求一个java方法。。。。。
现在呢我有2个对象user这2个对象里面的属性一模一样就是查询数据库的时候对应的属性值不一样
user对象 里面有属性userid,username,userpassword,usersex ,userage
我想要的一个方法是怎么样比较这2个user对象并且找出里面不一样的属性和值
我不想一个一个属性的比较而且如果这么做了我后面还有很多的对象要比较感觉太麻烦了。求大神们指点。。。。。。。。

------解决方案--------------------
不是哼清楚你要的效果是什么,如果都是USER的,你在类里面写个静态方法,
boolean isEuqal(USER user)
{
    //在这里一个个比较属性,如果有不一样就返回false,一样就放回true

}
//想要比较两个对象是否一样就这样
user1.isEuqal(user2);就行了,不知道是不是这样的效果
------解决方案--------------------
我觉得吧 要是这样的话呢 用反射写个通用方法呗 条用method中getXXX 获得值 然后比较值 不过比较值比较麻烦啊 不知道值类型的情况下 用Object比较值不知道会不会出问题
------解决方案--------------------
引用:
不是哼清楚你要的效果是什么,如果都是USER的,你在类里面写个静态方法,
boolean isEuqal(USER user)
{
    //在这里一个个比较属性,如果有不一样就返回false,一样就放回true

}
//想要比较两个对象是否一样就这样
user1.isEuqal(user2);就行了,不知道是不是这样的效果

你这样写的话只能对user类有用 要是还有其他类比较 你还要在其他类里面再写一次
------解决方案--------------------

public class BeanUtil{
//这里用泛型T保证传进来的o1 o2必须是同一个类型的对象
   public static <T> void compare(T o1,T o2) throws Exception{
      PropertyDescriptor pds=Introspector.getBeanInfo(o1.getClass,Object.class).getPropertyDescriptors();//获取对象的所有属性描述
      for(PropertyDescriptor pd:pds){
        String name=pd.getName();//获取属性名
        Method readMethod=pd.getReadMethod();//获取此属性的读方法即get方法
        Object value1=readMethod.invoke(o1);//调用get方法得到此属性在o1中的值
         Object value2=readMethod.invoke(o1);//调用get方法得到此属性在o2中的值
/*
*两个属性值不一样的就打印出来,这里只是简单的比较
*如果这两个value1和value2不是常规的类型而是数组或者集合或者又是其它的对象
*是集合或数组的自己进行展开一一取出对象进行递归调用,对象的直接递归调用
*/
         if(value1.equals(value2)){         
           System.out.println("属性:'"+name+"'不同一个为:"+value1+",另一个为:"+value2);