使用Java比较三个对象(语义)相等的最紧凑的代码是什么?我有一个业务规则,即对象必须是唯一的,即A 与B不同,A与C不同,B与C不同.
假设对象都是同一个类,并且已正确覆盖equals和hashCode方法.轻微的皱纹是物体C可能是null- 如果是这种情况那么A和B必须彼此不同.
我有一些代码,但它有点像我的口味工作.
Abe*_*bel 11
正如OP所说A并且B永远不为null,C可能为null,请使用:
if(A.equals(B) || B.equals(C) || A.equals(C))
// not unique
Run Code Online (Sandbox Code Playgroud)
并且,正如其他人已经建议的那样,您可以将其放入重用方法中.或者如果您需要更多重用,则使用通用方法;-)
请注意,在Java中,一个特性equals是,如果它的参数是null它不应该抛出,而是返回false.
因为我从不在没有使用Apache commons-lang的情况下启动Java项目,所以尝试ObjectUtils.equals(它是null安全的):
if (ObjectUtils.equals(a, b) || ObjectUtils.equals(b, c) || ObjectUtils.equals(a, c)) {
// error condition
}
Run Code Online (Sandbox Code Playgroud)
把这个逻辑放在一个通用的方法中,你会做得更好.
虽然业务逻辑允许C为null,但在这种情况下,通常更好地进行防御性编码并假设A或B也可以为空.