如何在两个对象在不知道属性名的情况下判断非空的属性值是否相同 请举例
时间: 2023-05-19 19:03:23 浏览: 51
可以使用反射机制来实现,在Java中可以使用Class类的getDeclaredFields()方法获取对象的所有属性,然后通过Field类的get()方法获取属性值,最后比较两个对象的属性值是否相同。以下是一个示例代码:
```
public static boolean compareObjects(Object obj1, Object obj2) throws IllegalAccessException {
Class<?> clazz1 = obj1.getClass();
Class<?> clazz2 = obj2.getClass();
Field[] fields1 = clazz1.getDeclaredFields();
Field[] fields2 = clazz2.getDeclaredFields();
if (fields1.length != fields2.length) {
return false;
}
for (int i = 0; i < fields1.length; i++) {
fields1[i].setAccessible(true);
fields2[i].setAccessible(true);
Object value1 = fields1[i].get(obj1);
Object value2 = fields2[i].get(obj2);
if (value1 == null && value2 == null) {
continue;
}
if (value1 == null || value2 == null || !value1.equals(value2)) {
return false;
}
}
return true;
}
```
假设有两个类Person和Student,它们都有属性name和age,现在创建两个对象p1和p2,可以使用上述方法比较它们的属性值是否相同:
```
Person p1 = new Person("Tom", 20);
Person p2 = new Person("Tom", 20);
boolean result = compareObjects(p1, p2);
System.out.println(result); // 输出true
Student s1 = new Student("Alice", 18, "Math");
Student s2 = new Student("Bob", 18, "Math");
result = compareObjects(s1, s2);
System.out.println(result); // 输出false
```