我有一个类名“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来进行更新(后端)。
答案 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)