【发布时间】:2023-03-22 11:17:01
【问题描述】:
如何检查具有相同属性的两个不同的类以不同的顺序具有相同的值
public class Person {
String name;
Long age;
// getters and setters
// equals and hashcode
}
不同顺序的第二类属性
public class PersonTwo {
Long age;
String name;
// getters and setters
// equals and hashcode
}
检查两个对象是否相等
Person person = new Person();
person.setAge(122L);
person.setName("Paul");
PersonTwo person2 = new PersonTwo();
person2.setName("Paul");
person2.setAge(122L);
boolean result = Objects.equals(person2, person);
这将返回 false,不能在两个类中进行更改,因为它们来自另一个库。
除了比较每个属性值,还有什么简单的方法可以做到这一点?
【问题讨论】:
-
您可以使用反射,因为 getter 在两个类中具有相同的名称,但是对于 2 个字段?只需手动比较字段:
boolean result = Objects.equals(person2.getAge(), person.getAge()) && Objects.equals(person2.getName(), person.getName()); -
@fish 类的字段比较多,只是展示了一个例子,你能用反射来展示这个例子吗?
-
真的是字段顺序的问题吗? - 因为我看不出有办法做到这一点,如果不是故意的话。还是
PersonTwo.equals包含if (obj instanceof PersonTwo) 之类的行?