我的要求是比较同一未知/泛型类型的两个对象。 对象是复杂的。 它们可以包含列表可本身包含列表。
所以,我最初的想法是使用比较比较对象,反射来发现bean的所有属性和一些递归处理任何嵌套列表中的对象可能包含。
或者,是否有一个实用工具,将尽一切的,对于我来说,在java中?
我的要求是比较同一未知/泛型类型的两个对象。 对象是复杂的。 它们可以包含列表可本身包含列表。
所以,我最初的想法是使用比较比较对象,反射来发现bean的所有属性和一些递归处理任何嵌套列表中的对象可能包含。
或者,是否有一个实用工具,将尽一切的,对于我来说,在java中?
我目前工作的一个类似的问题。 我可以证实,使用Java反射,你可以比较相同未知/泛型类型的两个对象。 我发现我需要这么做的一切在这里 。 这里是如何做到这一点有点破败:
field.get(ob1).equals(field.get(ob2)
然而,对象的内部对象比较是困难得多。 我没有找到一个解决方案,它和这里的问题是:要比较使用反射,你需要两个对象的项目。 我还没有发现一种方法来提取对象出未知类型的对象。 让我知道如果你发现任何东西。
如果你能确保所有的嵌套的对象树实现可比你可以使用:
public int compareTo(Object o) {
return CompareToBuilder.reflectionCompare(this, o);
}
http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/builder/CompareToBuilder.html
您可以使用豆utils的或直接使用... 阿帕奇百科全书EqualsBuilder
类似的解决方案
编辑:请看看这篇文章 。 在谷歌上搜索我也发现这个BeanDiff API这可能是对你有用。
母羊。 我想你可以使用反射来获取字段的列表,并从那里走。 你会需要一些复杂的代码,以确定是否某一领域是一个简单的或复杂的类型,并钻入是复杂的,当你在比较的字段。
看到这个让你开始在获取领域,他们的名字的列表,以及它们的类型
我会做它,你已经提到。
免责声明:我不是一个JAVA开发。
我不认为有一个清洁的方式来比较未知类型。 这是我会做:声明一个接口,我们称之为ComparableInterface
interface ComparableInterface {
function isEqual(ComparableInterface $a);
}
让你的不明物体可能是实现此接口的实例的所有类。 然后用它来比较它们。
任何其他解决方案,我能想到的将是一个丑陋的黑客攻击:/。 此外,我认为,如果你有比较thinkg你不知道,你在你的设计有问题。