比如2个bean,SubTestBean继承TestBean.
TestBean对象有2个private成员,通过public的get和set方法访问。
SubTestBean有3个private成员,同样通过public的get和set方法访问。现在需要做的是,如何判断2个SubTestBean对象相等。
第一个办法,通过反射,取得所有的SubTestBean成员,遍历比较。但是无法取得父类TestBean的2个private成员。另外一个办法,取得所有的public方法,将以get字母开头的方法全部调用一次,将返回值作比较。但是,不能保证get方法就是取成员变量的。有可能是取其他的2个方法都有问题,头疼啊,那位大哥帮忙解决了,给个思路吧。。
TestBean对象有2个private成员,通过public的get和set方法访问。
SubTestBean有3个private成员,同样通过public的get和set方法访问。现在需要做的是,如何判断2个SubTestBean对象相等。
第一个办法,通过反射,取得所有的SubTestBean成员,遍历比较。但是无法取得父类TestBean的2个private成员。另外一个办法,取得所有的public方法,将以get字母开头的方法全部调用一次,将返回值作比较。但是,不能保证get方法就是取成员变量的。有可能是取其他的2个方法都有问题,头疼啊,那位大哥帮忙解决了,给个思路吧。。
for(){
....
if (oneMethodName.indexOf("get") > -1) {
// 获得第一个bean的值
String oneValued = oneBeanMethod.invoke(objUtilBeanOne, null).toString();
String twoValued = oneBeanMethod.invoke(objUtilBeanTwo, null).toString();
if(oneValued.equals(twoValued)){
System.out.println("是相同的对象");
}
}
把equlas方法给重写下就可以了
===============
问题在于,不能保证get方法取得的一定是成员变量,如果是其他的get方法,就不该调用。
你可以以将非成员变量的方法改一下名字 不用get开头不是也可以吗
你可以以将非成员变量的方法改一下名字 不用get开头不是也可以吗
================
这个不是我能改的我不能保证非成员变量的取得方法一定不能get开头。那是别人的代码。我目前都没看到呢。现在的问题在于,如果有这种情况,如何解决。
要么 你定义一些 字段标识 成员变量的名字
如:public static final String TEST_A="id";
public static final String TEST_B="name";
public static final String TEST_C="age";
private String id;
private String name;
private String age;
你通过 反射得到的 TEST_A,TEST_B,TEST_C 来控制是否是成员变量
如:public static final String TEST_A="id";
public static final String TEST_B="name";
public static final String TEST_C="age";
===================
这个也不太可能,我不能修改别人的这部分代码。
你是一下
然后用 instanceof 来进行判断 是不是基本类型
=========
就算不是基本类型,也仍然有可能是成员变量。比如arraylist。
if(!(o instanceof SubTestBean))
return false;
SubTestBean oo = (SubTestBean)o;
if(!oo.getX().equals(getX())) return false;
if(!oo.getY().equals(getY())) return false;
if(!oo.getZ().equals(getZ())) return false; return true;
}
另外,改写equals也要改写hashCode
那还能怎么办?
看LZ意思好象是取成员变量的是哪个方法都不知道
这还怎么比较啊
不建议用反射-太慢,而且不好控制.
如果不是继承一下实现 equals。
最好不要用反射,效率低下还不好控制,不要怕麻烦。
父类中比较父类的私有成员
子类中的比较子类的私有成员
子类先调用 super.equals()然后将其结果与子类的相与
ps:我觉得既然是私有成员,那么最好不要以任何方法来获取其值,如果有这样的需求,那么设计就有问题,解决的方法就是在该类中实现一个public方法(如本例中的equals)来实现你的访问私有成员的需求
问题在于父类的私有成员各位高手还有更好的建议么?
把你要比较的对象属性全部加起来返回
比较通过这个方法返回得到的东东来比较两个对象是不是相等