【问题标题】:How to compare two values in Java?如何比较Java中的两个值?
【发布时间】:2011-10-27 10:00:50
【问题描述】:

我需要比较 Java 中的两个对象,但它们包含很多成员,有些不可见,而且我无权访问源代码 - 它们是来自第三方包的对象。

我需要找出它们之间的区别。类似于比较 C++ 中的内存块。但我不知道如何用 Java 做到这一点。

有什么帮助吗?

编辑:一些进一步的信息:我正在对两个对象进行一些操作 - 一个操作成功,另一个操作失败。但是我不知道有什么不同,这就是我需要这个比较的原因。我似乎无法反思工作,成员不可见异常或类似私人成员的情况。

【问题讨论】:

  • 您需要它来进行调试(即比较一次)还是进行逻辑分析?
  • o1.equals(o2) 不工作吗?
  • @Radu 仅当这两个对象以正确的语义实现 equals 并且其成员的类型相同时才有效。这就像一个深度克隆的比较版本......如果即使是一种成员类型也不会打扰覆盖 equals,那么你就不走运了。
  • @G_H,我当然知道,这就是为什么它是一个问题,而不是一个答案。如果类是质量库的一部分,它们应该支持equals()
  • @Radu 够公平的。但是我们没有很多背景信息。看到他提到这些类是第三方的,依赖这个假设是很危险的。并且一些成员可能是 Java SE API 中不覆盖 equals 的类。

标签: java


【解决方案1】:

看看这个问题Is there a Java reflection utility to do a deep comparison of two objects?

Unitils 可能对您的情况有所帮助

【讨论】:

    【解决方案2】:
    【解决方案3】:

    反思是一种可能的方式。

    通过 Java 反射,您可以访问这两个对象及其内容,无论它是否是私有的。不过要小心,这可能会被视为逆向工程,您可能会违反使用反射的许可协议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      相关资源
      最近更新 更多