如何比较两个相等类的所有属性值

时间:2013-11-07 17:46:56

标签: class comparison structure

我的课程定义如下:

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

谢谢

1 个答案:

答案 0 :(得分: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;
}