在python中我们可以通过这个方法比较对象的属性:
def __eq__(self, other):
return self.__dict__ == other.__dict__
它允许我们根据对象的属性来比较对象,无论它们有多少属性。
在 Java 中可以实现这样的功能吗? 我试着用这种方式比较对象,但你必须按每个属性来比较它们。是否可以像上面的 Python eq 方法那样做?
public class MyClass {
public MyClass(attr1, attr2, attr3, attr4) {
this.attr1 = attr1;
this.attr2 = attr2;
this.attr3 = attr3;
this.attr4 = attr4;
}
public boolean equals(Object object2) {
return object2 instanceof MyClass &&
attr1.equals(((MyClass)object2).attr1)&&......;
}
}
最佳答案
如果你想编写处理每种类型的通用方法,你需要使用反射。如果您只想对一两个类型执行此操作,那么我建议您为每个单独的类型覆盖 equals
方法,即对其进行硬编码。
下面是如何编写一个通用方法来接受每个单一类型并比较字段是否相等:
private static <T> boolean allFieldsEqual(T a, T b) throws IllegalAccessException {
Class<?> clazz = a.getClass();
Field[] fields = clazz.getFields();
for (Field field : fields) {
if (!field.get(a).equals(field.get(b))) {
return false;
}
}
return true;
}
逻辑是不言自明的。这是用法:
Student s1 = new Student("Tom", 1);
Student s2 = new Student("Tom", 1);
try {
System.out.println(allFieldsEqual(s1, s2));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
Student
定义为:
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
关于java - Java中多字段比较对象-Python中的dict方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46138973/