2011-10-27 487 views
2

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

我需要找出它们之间的区别。就像在C++中比较大块内存一样。但我不知道如何在Java中做到这一点。

任何帮助?

编辑:一些进一步的信息:我正在做两个对象上的一些操作 - 一个操作成功,另一个失败。不过,我不能说出有什么不同,这就是为什么我需要这种比较。我似乎无法得到反思工作,成员不可见异常或私人成员这样的行为。

+1

您是否需要调试(即比较一次)或逻辑? –

+2

'o1.equals(o2)'没有工作吗? – rid

+0

@Radu只有当这两个对象与正确的语义实现相等,并且它们的成员类型相同时,它才会起作用。这就像一个深层克隆的比较版本......如果即使是一个成员类型,也不会打扰覆盖等于的情况,那么您就不幸运了。 –

回答

1

反思是一种可能的方式做到这一点。

通过Java反射,您可以访问这两个对象及其内容,而不管它是否是私人的。但要小心,这可能被看作是逆向工程,并且您可能会违反使用反射的许可协议。