gpt4 book ai didi

java - 在 Java 中比较可序列化对象表示是个好主意吗?

转载 作者:行者123 更新时间:2023-11-29 04:21:04 28 4
gpt4 key购买 nike

我需要比较巨大的、多次嵌套的、复杂的 java 对象。没有循环引用(ufff)。为每个类添加“相等”方法需要数周时间。我想到也许将这些对象序列化为字节数组,然后比较这些数组会更容易。

非常简单的例子:

public class Car implements Serializable{

String name;
String brand;

public Car(String name, String brand) {
this.name = name;
this.brand = brand;
}
}

public class App {

public static void main(String[] args) {

Car carA = new Car("Ka", "Ford");
Car carB = new Car("P85D", "Tesla");
Car carC = new Car("Ka", "Ford");

byte[] carAr = SerializationUtils.serialize(carA);
byte[] carBr = SerializationUtils.serialize(carB);
byte[] carCr = SerializationUtils.serialize(carC);

boolean res = Arrays.equals(carAr, carBr);
System.out.println(res);

res = Arrays.equals(carAr, carAr);
System.out.println(res);

res = Arrays.equals(carAr, carCr);
System.out.println(res);
}
}

我的初步测试(针对更小和更简单的结构)表明它有效。不幸的是,我找不到任何证据证明对象属性总是以相同的顺序序列化。

更新

这些类是由 Maven 插件生成的,我还不知道如何拦截该过程以添加 equals 和 hashCode 方法。

最佳答案

如果你想比较对象的相等性,序列化它们然后比较是没有意义的,因为你可以简单地覆盖类的 equals 方法并按它们的字段比较它们(毫无疑问会有这种情况其中类的某些字段不应被考虑在内,并且您的序列化方法可能无法提供)。

Adding "equal" method to each class takes weeks.

我敢肯定情况并非如此。现代 IDE 能够为您生成这些方法,并且库(例如 Guava)提供了可以在一行代码中按字段比较对象的方法。

关于java - 在 Java 中比较可序列化对象表示是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49162513/

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