比较两个对象每个字段属性值不同的工具类
以下是一个比较两个对象每个字段属性值不同的工具类的示例代码:
import java.lang.reflect.Field;
public class ObjectComparator {
/**
* 比较两个对象每个字段属性值是否相同
*
* @param obj1 第一个对象
* @param obj2 第二个对象
* @return 是否相同
* @throws IllegalAccessException
*/
public static boolean compare(Object obj1, Object obj2) throws IllegalAccessException {
// 获取对象的Class
Class<?> clazz1 = obj1.getClass();
Class<?> clazz2 = obj2.getClass();
// 如果两个对象的Class不同,直接返回false
if (!clazz1.equals(clazz2)) {
return false;
}
// 获取对象的所有字段
Field[] fields = clazz1.getDeclaredFields();
// 遍历所有字段,比较属性值是否相同
for (Field field : fields) {
// 设置私有字段可访问
field.setAccessible(true);
// 获取第一个对象的属性值
Object value1 = field.get(obj1);
// 获取第二个对象的属性值
Object value2 = field.get(obj2);
// 如果两个属性值不同,直接返回false
if (!equals(value1, value2)) {
return false;
}
}
// 如果所有属性值都相同,返回true
return true;
}
/**
* 比较两个对象是否相同
*
* @param obj1 第一个对象
* @param obj2 第二个对象
* @return 是否相同
*/
private static boolean equals(Object obj1, Object obj2) {
if (obj1 == null && obj2 == null) {
return true;
}
if (obj1 == null || obj2 == null) {
return false;
}
return obj1.equals(obj2);
}
}
使用示例:
public class Main {
public static void main(String[] args) throws IllegalAccessException {
// 创建两个对象
Person p1 = new Person("Tom", 18);
Person p2 = new Person("Tom", 19);
// 比较两个对象是否相同
boolean result = ObjectComparator.compare(p1, p2);
System.out.println(result); // 输出false
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
输出结果为false,因为两个对象的age属性值不同
原文地址: https://www.cveoy.top/t/topic/ff4v 著作权归作者所有。请勿转载和采集!