日期:2014-05-20  浏览次数:20617 次

100分求救,如何比较2个复杂类型对象。
比如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个方法都有问题,头疼啊,那位大哥帮忙解决了,给个思路吧。。

------解决方案--------------------
用反射:通过判断是否是 get的方法 然后把这个get的方法值给取出来进行比较不就哦了
------解决方案--------------------
来混java版了?这个你可以重载SubTestBean类的equals()方法。然后这样调用:

obj1.equals(obj2);
------解决方案--------------------
重写equals方法。老老实实比较3+2个get。
另外,改写equals也要改写hashCode
------解决方案--------------------
父类和子类都重写 equals方法
父类中比较父类的私有成员
子类中的比较子类的私有成员
子类先调用 super.equals()然后将其结果与子类的相与
ps:我觉得既然是私有成员,那么最好不要以任何方法来获取其值,如果有这样的需求,那么设计就有问题,解决的方法就是在该类中实现一个public方法(如本例中的equals)来实现你的访问私有成员的需求