Java:等于检查接口而不是类

Mic*_*ael 1 java interface equals

我有一个案例,我有一个代表实体的Java接口.该接口在2个不同的类中实现.因此,我需要一个测试方法 - 如果2个类有一个共同的接口 - 如果这两个类的所有Getter-Values都是相同的

如果两者都是真的,那么在我需要的情况下,它们会平等地通过.(注意,我不知道他们实现了哪个界面,有一些可能)

这是不可能的,或者我需要提供接口,然后检查这两个类是否实现它?

谢谢你的帮助,迈克尔

Ral*_*lph 5

注意:如果一个类有不同的接口,那么这可能会破坏约束:

equals方法在非null对象引用上实现等价关系:

  • 它是自反的:对于任何非空引用值x,x.equals(x)应该返回true.
  • 它是对称的:对于任何非空引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)才应返回true.
  • 它是传递性的:对于任何非空引用值x,y和z,如果x.equals(y)返回true而y.equals(z)返回true,则x.equals(z)应返回true.
  • 它是一致的:对于任何非空引用值x和y,x.equals(y)的多次调用始终返回true或始终返回false,前提是不修改在对象的equals比较中使用的信息.

@see:Object.equals的java doc

如果你有三个类A,B,C树Itnerfaces I1,I2,I3:

  • 接口I1和I2,
  • B表示I2和I3
  • C表示I1和I3.

然后你可能会遇到这种情况:

  • 由于I2,A等于B.
  • 由于I3,B等于C.
  • 但是:由于I3,A不等于C.

这会违反传递约束!这可能导致很难找到错误!

这只是一个警告,在您开始将其声明为主要架构风格之前要三思.

添加:

相反,我建议实现类似于比较器的东西,但不是为了比较而是检查"等于",它的含义类似于"等于X"(其中X是例如你的一个接口)