以下是一个比较两个对象每个字段属性值不同的工具类的示例代码:

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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录