2013-11-07 2 views
0

Я класс определяется следующим образом:Как сравнить все значения свойства от двух одинаковых классов

Public Class DeviceConfig 
    Private _maxNumCodesGlobal As Integer 
    Private _maxNumCodesDataMatrix As Integer 
    Private _maxNumCodesQR As Integer 
    Private _maxNumCodesBarcode As Integer 
    Private _partialResults As String 
    Private _allowIdenticalSymbols As String 
    Private _datamatrixValidation As Integer 
    Private _datamatrixValidationType 
'AND MUCH MORE PROPERTIES 
'GETTERS & SETTERS 
End Class 

, как вы можете видеть, что это длинный список свойств в этом классе.

Мне нужно сравнить значения свойств из экземпляра со значениями свойств другого экземпляра.

Есть ли способ перебрать все из них или, что еще лучше, просто сравнить оба класса и получить true/false, если они имеют одинаковые значения свойств или нет?

if instance1=instance2 then true 

Спасибо

+0

Вы можете написать метод класса, который сравнивает его с другими объектами того же класса, тогда вам нужно будет только один раз написать логику сравнения итераций сравнения. – admdrew

ответ

0

я столкнулся с той же проблемой и создал этот метод. Надеюсь, это поможет вам. Он использует отражения для итерации по публичным полям, игнорируя их с помощью аннотации JsonIgnore. Этот метод не рассматривает поля как List, Set и т. Д. Вы можете изменить его для работы с свойствами вместо полей.

protected <T> boolean equals(T object1, T object2) { 
    Field[] fields = object1.getClass().getFields(); 
    for (Field field : fields) { 
     if (field.getAnnotation(JsonIgnore.class)!= null) continue; //do not check the fields with JsonIgnore 
     Object value1; 
     Object value2; 
     try { 
      value1 = field.get(object1); 
      value2 = field.get(object2); 
     } catch (Exception e) { 
      logger.error("Error comparing objects. Exception: " + e.getMessage()); 
      return false; 
     } 
     //comparing 
     if (value1 == null) { 
      if (value2 != null) 
       return false; 
     } else if (!value1.equals(value2)) 
      return false; 

    } 
    return true; 
} 
Смежные вопросы