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

标签 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);
}

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

最佳答案

只要您的类是 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值,这会很有用。

关于java - GSON 可以用来检查对象相等性而不是覆盖 POJO 类的 equals 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33489991/

相关文章:

java - 从客户端通过一个或多个网络远程访问 EJB

java - Gson:如何在使用流 api 解析时跳过 JSON 数组中的行

Java:无法让 .equals() 工作

java - 在 Tomcat war 文件上运行 JBoss Tattletale 不会返回任何输出

Java - jComboBox1 上的 ActionEvent 来更新 jComboBox2 - 键盘/鼠标 Enter 键条件

java - Logback 不显示堆栈跟踪

java - Gson中可配置的@SerializedName

java - 在 gson/retrofit 中,是否有内置的方法来处理不同格式的日期?

methods - 防止equals方法的 stub

java - 覆盖 hashCode() - 这够好了吗?