Java比较类的元素

时间:2017-03-20 09:53:05

标签: java mysql sql object java-ee

我有一个类名“Users”,有2个元素(int)userId和(String)userName。

我们说

Users obj1 = new Users(10, "User1");
Users obj2 = new Users(11, "User2");

所以我想将obj1与obj2进行比较 元素元素

10与11相比, “User1”与“User2”比较。

我从网上做的研究。无论是将其转换为2d数组进行比较还是其他任何方法,都无法做到这一点。有没有办法做这种事情?

我实际上想要做一个审计跟踪,所以我在更改之前和更改之后都有对象,所以任何已更改的元素都会在audit_trail表中插入一条带有before值和after值的新记录。

我是编程的新手,我尽力思考方法,但它不起作用。有没有其他方法可以通过SQL执行此操作?我使用ng-admin作为(前端)和API java http来进行更新(后端)。

5 个答案:

答案 0 :(得分:0)

您需要实现Comparable<Users>接口。如果你也想要进行等式检查,那么你必须覆盖

boolean equals(Object) 

int hashCode()

阅读:

https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

Why do I need to override the equals and hashCode methods in Java?

答案 1 :(得分:0)

根据您的问题,我们可以比较两个不同的对象。 请执行equals方法,以便在Comparable<Users>中执行您的操作。

我们在下面举例说明,

Class obj1 = new Class(1, "raja");
Class obj2 = new Class(2, "thiru");

id和name是类的公共变量。然后

将函数重写为,

public boolean equals(Object obj) 
{
    return (this.id == obj.id && this.name.equals(obj.name.equals));
}

感谢。

答案 2 :(得分:0)

您应该覆盖.equals()方法,使您的Users课程如下:

public class Users {
    private int mId;
    private String mName;

    public Users(int pId, String pName) {
        mId = pId;
        mName = pName;
    }

    public int getId() {
        return mId;
    }

    @Override
    public boolean equals(Object pObject) {
        return (pObject instanceof Users && ((Users) pObject).getId() == mId);
    }
}

答案 3 :(得分:0)

我可能会创建一个BeanDelta对象

public class PropertyDelta {
    private String propertyName;
    private Object value1;
    private Object value2;

    // constructor & getters
}

public class BeanDelta<T> {
    private Class<T> type;
    private List<PropertyDelta> propertyDeltas = new ArrayList<>();

    public BeanDelta(Class<T> type) {
        this.type = type;
    }

    // getters
}

然后你可以写一个基于反射的方法

 public <T> BeanDelta<T> getDelta(T o1, T, o2) {
     Class<T> type = o1.getClass();
     Method[] methods = type.getMethods();
     BeanDelta<T> delta = new BeanDelta<>(type);
     for (Method meth : methods) {
         boolean isGetter = method.getParameterTypes().length == 0 && !method.getReturnType().equals(void.class) && meth.getName().startsWith("get");
         if (isGetter) {
             Object v1 = meth.invoke(o1);
             Object v2 = meth.invoke(o2);

             if (!Objects.equal(v1, v2)) {
                 String propertyName = meth.getName().substring(3);
                 delta.propertyDeltas.add(new PropertyDelta(propertyName, v1, v2));
             }
         }
     }
     return delta;
 }

答案 4 :(得分:0)