2014-04-04 107 views
0

我发现一个方法等于比较两个移动,我想简化它。简化Java布尔比较

public boolean equals(Object obj) { 
    if (obj == null) { 
     return false; 
    } 
    if (getClass() != obj.getClass()) { 
     return false; 
    } 
    final Move other = (Move) obj; 
    return !(this.initialBalls != other.initialBalls && 
      (this.initialBalls == null || !this.initialBalls.equals(other.initialBalls))) 
      && this.direction == other.direction && this.color == other.color; 
} 

有人有想法吗?

+3

也许代码审查的人可以帮助你:http://codereview.stackexchange.com/ –

+1

那return语句是不必要的复杂性。前往CR,我会很乐意提供更简单的东西。 –

+1

这个问题似乎是脱离主题,因为它是关于codereview,因此属于该网站。 –

回答

0

您可以使用Apache Commons的EqualsBuilder

public boolean equals(Object obj) { 
    if (obj == null) { return false; } 
    if (obj == this) { return true; } 
    if (obj.getClass() != getClass()) { 
     return false; 
    } 
    Move rhs = (Move) obj; 
    return new EqualsBuilder() 
     .appendSuper(super.equals(obj)) 
     .append(initialBalls, rhs.initialBalls) 
     .append(direction, rhs.direction) 
     .append(color, rhs.color) 
     .isEquals(); 
    } 
+2

为什么额外的依赖只是为了那个? – async

+1

为什么不呢?在OP中是否存在一个限制,即没有第三方库被允许?当你正在比较的字段是浮点数值时,你是否知道实现'equals()'的正确方法?你相信所有与你一起工作的开发者也一样吗?如果你的字段不是原语,它还会节省大量的空检查。 –

+0

红鲱鱼多吗?您仍然无法证明只需在正确的位置添加几个空格/新行或通过移动几个字符即可完全使用完整的库来完成您自己的任务。我一般不会讲,但是关于OP的任务,这绝对是微不足道的。 – async