Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GSON是否可以用于检查对象相等,而不是覆盖POJO类的相等?_Java_Gson_Equals_Equality - Fatal编程技术网

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

Java GSON是否可以用于检查对象相等,而不是覆盖POJO类的相等?,java,gson,equals,equality,Java,Gson,Equals,Equality,我有如下类(跳过了getter和setter以及业务逻辑方法) 我希望能够比较上述类型的对象。它们也有方法,一些我跳过的静态最终常量。我是否可以按如下方式重写equals方法 @Override public boolean equals(Object o) { Gson gson = new Gson(); String o1 = gson.toJson(this); String o2 = gson.toJson((cast)o); return o1.equ

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

我希望能够比较上述类型的对象。它们也有方法,一些我跳过的静态最终常量。我是否可以按如下方式重写
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中,您可以通过以下操作生成该方法:

右键单击包资源管理器中的类>“Source”>“Generate hashCode()and equals()”>检查应检查相等性的字段>“OK”

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


我相信这样做更好更安全,因为它会在强制转换之前检查
null
值并检查类型。您还可以选择应检查哪些值是否相等,如果您想跳过某些
最终值,这将非常有用。

同意。另外,我认为GSON不能保证属性排序,如果在两次转换(可能是优化?)之间出现问题,这可能是一个问题。我不知道eclipse有用于equals的代码生成器。我还找到了toString()的代码生成器。这将节省我很多时间。您还可以使用
右键单击包资源管理器中的类>“Source”>“generate getter and setters”>检查要生成getter/setters的字段>“OK”
@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);
}