我有以下类(跳过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);
}
我知道这很懒,但我想快速制作一些应用程序原型,这会为我节省很多时间。我不关心表现,只关心正确性。
答案 0 :(得分:2)
只要您的课程是POJO,是的,这将有效。但是,如果您为equals
方法提供的类型与this
的类型不同,那么您正在执行的转换可能会导致ClassCastException。如果发送null
,它也会抛出异常。
您也知道,您也可以在大多数IDE中自动生成equals
方法。例如,在Eclipse中,您可以通过执行以下操作生成该方法:
右键单击Package Explorer中的类> “来源”> “生成hashCode()和equals()”>检查应检查相等性的字段> “OK”
我不能真正谈论Intellij Idea,因为我没有使用它,但this link可能对你有所帮助。
我认为以这种方式做得更好更安全,因为它检查null
值并在转换前检查类型。您还可以选择检查哪些值是否相等,如果您想跳过某些final
值,这可能很有用。