Java 对象不相同';无法检测到变化

Java 对象不相同';无法检测到变化,java,object,Java,Object,我用它来获取两个对象之间的差异,它工作得很好,直到它必须检查列表或对象。我的方法如下所示: public <T, G> T findDifferences(T base, G updated) { try { Class<T> tClass = (Class<T>) base.getClass(); Object diffObj = tClass.newInstance(); DiffNode diff = ObjectDiffer

我用它来获取两个对象之间的差异,它工作得很好,直到它必须检查列表或对象。我的方法如下所示:

public <T, G> T findDifferences(T base, G updated) {
  try {
    Class<T> tClass = (Class<T>) base.getClass();
    Object diffObj = tClass.newInstance();
    DiffNode diff = ObjectDifferBuilder.buildDefault().compare(base, updated);
    diff.visit((node, visit) -> {
      if (node.hasChanges() && !node.hasChildren()) {
        try {
          node.canonicalSet(diffObj, node.canonicalGet(updated));
        } catch (Exception e) {
          log.error("Error while getting canonicalGet");
        }
      }
    });
    if (!diff.getState().name().equals("UNTOUCHED")) {
      return tClass.cast(diffObj);
    } else {
      return null;
    }
  } catch (Exception e) {
    log.error("Error while finding differences");
    return null;
  }
}
如果我想更新对象并发送,例如

{
"allergens": ["ABC"]}

它没有发现差异。类似的问题也存在于对象,比如“模块”

您如何调用该方法,以及如何保存旧/新对象/列表以供以后比较?听起来你很可能在做类似于
objectnewobject=Object的事情
然后检查
newObject
object
之间的差异。比较对象在这里->DiffNode diff=ObjectDifferBuilder.buildDefault().compare(base,updated);并在这里保存差异->node.canonicalSet(diffObj,node.canonicalGet(updated));正如我所说的,它适用于单个对象(如字符串)。您如何调用该方法,以及如何保存旧/新对象/列表以供以后比较?听起来你很可能在做类似于
objectnewobject=Object的事情
然后检查
newObject
object
之间的差异。比较对象在这里->DiffNode diff=ObjectDifferBuilder.buildDefault().compare(base,updated);并在这里保存差异->node.canonicalSet(diffObj,node.canonicalGet(updated));正如我所说的,它适用于单个对象(如字符串)。
{
"allergens": ["ABC"]}