比较java中的两个通用复杂对象

比较java中的两个通用复杂对象,java,generics,reflection,compare,Java,Generics,Reflection,Compare,我的要求是比较相同未知/泛型类型的两个对象。 对象是复杂的。它们可以包含列表,而列表本身也可以包含列表 所以,我最初的想法是使用比较器来比较对象,反射 用于发现bean的所有属性和一些递归以处理任何嵌套 列出可能包含的对象 或者,是否有一个实用程序可以用java为我完成所有这些工作?我会按照您刚才提到的那样做 检查两个对象是否属于同一类型和类型 迭代对象1的所有变量 获取对象2中变量的值 调用valueOfVariableInObject1.compareTo(valueOfVariableIn

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

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


或者,是否有一个实用程序可以用java为我完成所有这些工作?

我会按照您刚才提到的那样做

  • 检查两个对象是否属于同一类型和类型
  • 迭代对象1的所有变量
  • 获取对象2中变量的值
  • 调用valueOfVariableInObject1.compareTo(valueOfVariableInObject2)

  • 母羊。我想您可以使用反射来获得字段列表,然后从那里开始。您需要一些复杂的代码来确定给定字段是简单类型还是复杂类型,并在比较时深入研究复杂的字段

    要开始获取字段列表、字段名称和类型,您可以使用或直接使用

    相似的

    编辑:
    请看一看。通过谷歌搜索,我还发现了一些可能对你有用的东西。

    免责声明:我不是JAVA开发人员

    我不认为有一个干净的方法来比较未知类型。我要做的是:声明一个接口,我们称之为ComparableInterface

    interface ComparableInterface {
        function isEqual(ComparableInterface $a);
    }
    
    使未知对象可能是该接口实例的所有类实现此接口。然后用它来比较它们


    我能想到的任何其他解决方案都将是一个丑陋的黑客:/。此外,我认为如果您必须比较您不知道的thinkg,那么您的设计就有问题。

    如果您可以确保所有嵌套对象树实现都可以使用:

     public int compareTo(Object o) {
       return CompareToBuilder.reflectionCompare(this, o);
     }
    

    我目前正在处理一个类似的问题。我可以确认,使用java反射可以比较相同未知/泛型类型的两个对象。我找到了我需要做的一切。这里有一个关于如何做的小结:

  • 在一个函数中获取两个对象
  • 确定ob1字段上的所有
  • 假设对象的类型相同,您可以使用“一”字段从两个对象中获取值并进行比较,如so
    field.get(ob1).equals(field.get(ob2)

  • 但是,比较对象内部的对象要困难得多。我还没有找到解决方案,问题是:要使用反射来比较项目,需要两个对象。我还没有找到从未知类型的对象中提取对象的方法。如果你发现了什么,请告诉我。

    如果是两个不同的对象,你不知道它们的类型,你会根据什么标准来比较它们?@ClementHerreman:这也是我的第一个想法。但问题是“比较两个相同未知/泛型类型的对象”嗨,我真的没有考虑过。让我们假设有一个预定义的可能类型列表,字符串、整数、日期、列表-包含相同的类型。然后我可以在对每个类型进行比较之前使用instanceOf check。我相信这就是所谓的“深度比较”。我想这大概就是我想要的,但我有一个额外的要求。我需要抛出一个异常并报告哪些属性不相等,而不是返回一个布尔值来表示是/否。因此,我认为我需要实现类似于EqualBuilder的功能,在对象不相等时抛出异常当两个对象之间遇到差异时,API类EqualsBuilder不会遍历更深。您可能需要考虑另一个API或使用自己的方法。