我现在需要写一个方法,传入两个同类型泛型对象,两者ID是相同的的,但有一些属性是不一样的,我需要对比出两个对象相同属性的不同的值
时间: 2023-05-25 20:01:38 浏览: 69
A:你可以先获取两个对象的所有属性,然后遍历这些属性,逐个比较它们的值是否相同。可以考虑使用Java的反射机制来获取对象的属性列表,并通过属性名称来获取对应的属性值。具体来说,你可以按照以下步骤实现该方法:
1. 确定两个对象的类型,并获取它们的所有属性列表。
2. 遍历属性列表,对于每一个属性,通过属性名称获取两个对象的对应属性值。
3. 比较属性值是否相等,如果不相等,则说明这个属性在两个对象中有不同的值,可以将其记录下来。
4. 最后返回记录的不同属性列表。
可以考虑定义一个通用的比较方法,让其支持不同类型的对象进行比较,例如:
```java
public static <T> List<String> compare(T obj1, T obj2) throws IllegalAccessException {
List<String> diffList = new ArrayList<>();
Field[] fields = obj1.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
Object value1 = field.get(obj1);
Object value2 = field.get(obj2);
if (!Objects.equals(value1, value2)) {
diffList.add(field.getName() + " diff: " + value1 + " vs " + value2);
}
}
return diffList;
}
```
需要注意的是,该方法对于复杂类型的对象,可能会递归比较其内部的子对象,导致比较过程很耗时。因此,建议在代码实现时要谨慎处理。