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

时间:2015-11-03 01:31:53

标签: java gson equals equality

我有以下类(跳过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);
}

我知道这很懒,但我想快速制作一些应用程序原型,这会为我节省很多时间。我不关心表现,只关心正确性。

1 个答案:

答案 0 :(得分:2)

只要您的课程是POJO,是的,这将有效。但是,如果您为equals方法提供的类型与this的类型不同,那么您正在执行的转换可能会导致ClassCastException。如果发送null,它也会抛出异常。

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

  

右键单击Package Explorer中的类> “来源”> “生成hashCode()和equals()”>检查应检查相等性的字段> “OK”

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

我认为以这种方式做得更好更安全,因为它检查null值并在转换前检查类型。您还可以选择检查哪些值是否相等,如果您想跳过某些final值,这可能很有用。