2014-12-10 3 views
3

두 필드를 비교하기 위해 클래스의 equals 메소드를 오버라이드하고 있습니다. 2 개의 객체가 동일하지 않은 경우, 어느 객체가 불균등 해지기 때문에 어느 필드가 불등인가 어떤가를 조사하는 방법이 존재합니까?equals를 오버라이드하고 어떤 필드가 같지 않은지 확인

+1

가능한 경우 어떻게 알리시겠습니까? 당신이하는 일은'equals (Object)'를 호출하는 것뿐입니다. –

+0

그래서 두 번 호출하려고합니다. 만약 equals가 false를 반환한다면, 동등하지 않은 것을 접근하려고 시도하십시오. 동시에, 각 필드가 동등한 지 아닌지를 확인하고 싶지 않습니다. 그냥 기존의 기능이 있는지 궁금해, 그렇지 않으면 내가 방법을 수정합니다. – Ava

+0

알기를 원하는 것 : 필드 이름 또는 다른 것? –

답변

2

각 데이터 멤버에 대해 차이나 null이있는 동일한 유형의 개체를 반환하는 클래스에 메서드를 작성할 수 있습니다. 또는 당신을위한 도서관을 찾을 수 있습니다. 필드이 같은 정보를 strore하는 클래스를 작성 http://javers.org

+0

이미 Javers를 시도했습니다. 그것은 버기입니다. 나를 위해 제대로 작동하지 않았다. – Ava

0

시도 (또는 Map 사용) : 등호의 다음

class FieldsContainer<F,V>{ 
    private F field; 
    private V value; 
    public FieldsContainer(F field, V value) { 
     this.field = field; 
     this.value = value; 
    } 
    public FieldsContainer(){} 
    public F getField() { 
     return field; 
    } 
    public void setField(F field) { 
     this.field = field; 
    } 
    public V getValue() { 
     return value; 
    } 
    public void setValue(V value) { 
     this.value = value; 
    } 

} 

과() :

public boolean equals(Object obj) { 
     ... 
     } else if (!field1.equals(other.field1)){ 
      fieldsContainer=new FieldsContainer("fieldName1", field1); 
      return false; 
     } 
     if (field2 != other.field2){ 
      fieldsContainer=new FieldsContainer("fieldName2", field2); 
      return false; 
     } 
     fieldsContainer=null; 
     return true; 
    } 

메인에서을 :

if(!obj1.equals(obj2)){ 
    fieldsContainer.getField(); 
    fieldsContainer.getValue(); 
    //Your stuff 
}