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
值,这会很有用。
我有 类 如下(跳过了 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
值,这会很有用。