gpt4 book ai didi

java - 获取两个不同的类实例并比较它们(Java)

转载 作者:行者123 更新时间:2023-11-30 03:56:59 25 4
gpt4 key购买 nike

我正在前端接收来自 Ext JS 应用程序的输入,我想比较 java 端的两条记录,即 UI 端表单更新之前的记录和设置所有新值之后的记录。我对同一类型的对象进行了两次引用,一次在设置新值之前 (oldRecord),一次在设置新值之后 (newRecord) 并进行比较,但是当我尝试使用 oldRecord.getClass() 在旧记录上它将显示新的字段值。有什么办法可以访问旧值吗?我还尝试创建两个字段数组并将它们传递到我的方法中。

private static Map<String, List<String>> changes;

public static <T> Map<String, List<String>> getChanges (T oldRecord, T newRecord) {

changes = new HashMap<String, List<String>>();

try {
if(oldRecord instanceof UserInfo && oldRecord.getClass().equals(newRecord.getClass())) {
Field field = oldRecord.getClass().getDeclaredField("name");
field.setAccessible(true);
System.out.println(field.get(oldRecord));
field = newRecord.getClass().getDeclaredField("name");
field.setAccessible(true);
System.out.println(field.get(newRecord));

// will loop through all fields in both records and compare

}
} catch (Exception e) {
System.err.println("Exception");
}

return changes;
}

最佳答案

我认为您正在使用同一个对象。如果您做了这样的事情,就会出现这种情况:

Object oldRecord = new Object();
Object newRecord = oldRecord;
newRecord.doSomethingThatModifyIt();
getChanges(oldRecord, newRecord);

如果您做过类似的事情,请记住Object newRecord = oldRecord;不创建任何新对象,只是将 2 个变量设置为指向同一个对象。

您应该使用类似 clone() 的方法基于旧对象创建一个新对象。你必须实现的。或者只是手动设置新创建的对象的字段。

注意:我已经使用 Object 但它当然可以是任何类型。

关于java - 获取两个不同的类实例并比较它们(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22916822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com