2014-04-04 2 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에서 누락 된 제 3 자 라이브러리가 없다는 제약이 있었습니까? 비교중인 필드가 부동 소수점 값일 때 equals()를 구현하는 올바른 방법을 알고 있습니까? 함께 일하는 모든 개발자들도 그렇게 믿으십니까? 또한 필드가 프리미티브가 아닌 경우 많은 'null'검사를 저장합니다. –

+0

붉은 청어 많이? 적절한 공간에 몇 개의 공백/줄 바꿈을 추가하거나 몇 개의 문자를 움직여서 스스로 쉽게 고칠 수있는 라이브러리에 대해 전체 라이브러리를 사용하는 것은 여전히 ​​실패합니다. 그리고 나는 일반적으로 말하는 것이 아니라, OP의 임무에 대해 말하고 있습니다. 이것은 결코 사소한 일입니다. – async