比较两个通用的复杂对象的Java(compare two generic complex objec

2019-09-16 19:18发布

我的要求是比较同一未知/泛型类型的两个对象。 对象是复杂的。 它们可以包含列表可本身包含列表。

所以,我最初的想法是使用比较比较对象,反射来发现bean的所有属性和一些递归处理任何嵌套列表中的对象可能包含。

或者,是否有一个实用工具,将尽一切的,对于我来说,在java中?

Answer 1:

我目前工作的一个类似的问题。 我可以证实,使用Java反射,你可以比较相同未知/泛型类型的两个对象。 我发现我需要这么做的一切在这里 。 这里是如何做到这一点有点破败:

  1. 在一个函数获取两个对象
  2. 确定所有的OB1的领域
  3. 假设对象相等类型的可以使用的一个字段来获取值了两个对象和比较,像这样field.get(ob1).equals(field.get(ob2)

然而,对象的内部对象比较是困难得多。 我没有找到一个解决方案,它和这里的问题是:要比较使用反射,你需要两个对象的项目。 我还没有发现一种方法来提取对象出未知类型的对象。 让我知道如果你发现任何东西。



Answer 2:

如果你能确保所有的嵌套的对象树实现可比你可以使用:

 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



Answer 3:

您可以使用豆utils的或直接使用... 阿帕奇百科全书EqualsBuilder

类似的解决方案

编辑:请看看这篇文章 。 在谷歌上搜索我也发现这个BeanDiff API这可能是对你有用。



Answer 4:

母羊。 我想你可以使用反射来获取字段的列表,并从那里走。 你会需要一些复杂的代码,以确定是否某一领域是一个简单的或复杂的类型,并钻入是复杂的,当你在比较的字段。

看到这个让你开始在获取领域,他们的名字的列表,以及它们的类型



Answer 5:

我会做它,你已经提到。

  1. 检查两个对象都是同一类型的,并
  2. 遍历对象1的所有变量
    1. 获取对象2中的变量的值
    2. 呼叫valueOfVariableInObject1.compareTo(valueOfVariableInObject2)


Answer 6:

免责声明:我不是一个JAVA开发。

我不认为有一个清洁的方式来比较未知类型。 这是我会做:声明一个接口,我们称之为ComparableInterface

interface ComparableInterface {
    function isEqual(ComparableInterface $a);
}

让你的不明物体可能是实现此接口的实例的所有类。 然后用它来比较它们。

任何其他解决方案,我能想到的将是一个丑陋的黑客攻击:/。 此外,我认为,如果你有比较thinkg你不知道,你在你的设计有问题。



文章来源: compare two generic complex objects java