以下是一个示例代码,展示了如何比较两个POJO并将差异输出到另一个POJO:
import java.lang.reflect.Field;
public class PojoComparator {
public static void compareAndOutputDiff(T pojo1, T pojo2, T diffPojo) throws IllegalAccessException {
// 获取POJO的所有字段
Field[] fields = pojo1.getClass().getDeclaredFields();
for (Field field : fields) {
// 设置字段可访问,以便读取私有字段的值
field.setAccessible(true);
// 获取字段的值
Object value1 = field.get(pojo1);
Object value2 = field.get(pojo2);
// 比较字段的值
if (!value1.equals(value2)) {
// 将不同的值赋给diffPojo
field.set(diffPojo, value2);
}
}
}
}
上述代码中,我们首先使用反射获取了POJO的所有字段。然后,我们逐个比较两个POJO对象的字段值。如果字段值不同,我们将差异值(即第二个POJO对象的字段值)赋给diffPojo对象。
使用示例:
public class Main {
public static void main(String[] args) {
// 创建两个Person对象
Person person1 = new Person("John", 30);
Person person2 = new Person("John", 35);
// 创建一个空的Person对象用于存储差异值
Person diffPerson = new Person();
try {
// 比较两个Person对象并将差异值输出到diffPerson对象
PojoComparator.compareAndOutputDiff(person1, person2, diffPerson);
// 打印差异值
System.out.println("Name: " + diffPerson.getName());
System.out.println("Age: " + diffPerson.getAge());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 省略getter和setter方法
}
在上述示例中,我们创建了两个Person对象,其中age字段的值不同。然后,我们使用PojoComparator.compareAndOutputDiff方法比较这两个对象,并将差异值输出到一个新的Person对象diffPerson中。最后,我们打印出了diffPerson对象的差异值。
输出结果:
Name: null
Age: 35
可以看到,diffPerson对象中的age字段值为35,表示与person2对象的age字段值不同。
上一篇:比较两个品种中的两个变量。
下一篇:比较两个PowerShell数组