GSON 可以用于检查对象相等性而不是覆盖 POJO 类 的相等性吗?

Can GSON be used to check object equality instead of overriding equals for POJO classes?

我有 类 如下(跳过了 getter 和 setter 以及业务逻辑方法)

class Appearance{
    int heightInCm, weightInLbs;
    String eyeColor, hairColor, skinColor;
}

class Address {
    String street, apt, city, country;
    int zipCode;
}

class Person {
    String firstName, LastName, middleInitials;
    Appearance appearance;
    Address address;
}

我希望能够比较上述类型的对象。他们也有方法,一些我跳过的静态最终常量。我可以按如下方式覆盖 equals 方法吗?

@Override
public boolean equals(Object o) {
    Gson gson = new Gson();
    String o1 = gson.toJson(this);
    String o2 = gson.toJson((cast)o);
    return o1.equals(o2);
}

我知道这很懒惰,但我正在尝试快速制作一些应用程序的原型,这会节省我很多时间。我不关心性能,只关心正确性。

只要您的 类 是 POJO,就可以。但是,如果您提供给 equals 方法的类型与 this 的类型不同,您正在执行的转换可能会导致 ClassCastException。如果发送 null,它也会抛出异常。

如您所知,您还可以在大多数 IDE 中自动生成 equals 方法。例如,在 Eclipse 中,您可以通过执行以下操作来生成该方法:

Right-Click on a class in the Package Explorer > "Source" > "Generate hashCode() and equals()" > Check the fields that should be checked for equality > "OK"

我不能真正谈论 Intellij Idea,因为我没有使用它,但 this link 可能会对你有所帮助。

我相信这样做更好也更安全,因为它会检查 null 值并在转换前检查类型。您还可以选择应该检查哪些值是否相等,如果您想跳过一些 final 值,这会很有用。