最简洁的方法是使用Java比较三个对象是否相等?

Joh*_*ley 8 java equals

使用Java比较三个对象(语义)相等的最紧凑的代码是什么?我有一个业务规则,即对象必须是唯一的,即A 与B不同,A与C不同,B与C不同.

假设对象都是同一个类,并且已正确覆盖equalshashCode方法.轻微的皱纹是物体C可能是null- 如果是这种情况那么AB必须彼此不同.

我有一些代码,但它有点像我的口味工作.

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.

  • @Aaron:它不是`和`,它是`或`.如果一个术语是假的,那么另一个术语仍然可以成立:"Auto.equals(Bike)或Bike.equals(Car)或Auto.equals(Car)".前两个是假的,第三个是真的:它是需要的;-) (3认同)

Rya*_*ary 6

因为我从不在没有使用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也可以为空.