Mic*_*ael 1 java interface equals
我有一个案例,我有一个代表实体的Java接口.该接口在2个不同的类中实现.因此,我需要一个测试方法 - 如果2个类有一个共同的接口 - 如果这两个类的所有Getter-Values都是相同的
如果两者都是真的,那么在我需要的情况下,它们会平等地通过.(注意,我不知道他们实现了哪个界面,有一些可能)
这是不可能的,或者我需要提供接口,然后检查这两个类是否实现它?
谢谢你的帮助,迈克尔
注意:如果一个类有不同的接口,那么这可能会破坏约束:
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:
然后你可能会遇到这种情况:
这会违反传递约束!这可能导致很难找到错误!
这只是一个警告,在您开始将其声明为主要架构风格之前要三思.
添加:
相反,我建议实现类似于比较器的东西,但不是为了比较而是检查"等于",它的含义类似于"等于X"(其中X是例如你的一个接口)