Java 对象合并:如何优雅地合并两个对象并避免 null 值
在 Java 中,可以通过将两个对象的属性逐一进行比较,来实现将两个对象合并。如果两个对象的属性不同,则将非 null 属性值赋给新对象,如果两个对象的属性相同,则保留原有对象的属性值。
以下是一个示例代码:
public class ObjectMerger {
public static <T> T merge(T o1, T o2) throws IllegalAccessException {
if (o1 == null && o2 == null) {
return null;
}
if (o1 == null) {
return o2;
}
if (o2 == null) {
return o1;
}
Class<?> clazz = o1.getClass();
if (!clazz.equals(o2.getClass())) {
throw new IllegalArgumentException("Objects must be of the same type");
}
T result = (T) clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
Object value1 = field.get(o1);
Object value2 = field.get(o2);
if (value1 == null && value2 == null) {
continue;
} else if (value1 == null) {
field.set(result, value2);
} else if (value2 == null) {
field.set(result, value1);
} else if (!value1.equals(value2)) {
field.set(result, value2);
} else {
field.set(result, value1);
}
}
return result;
}
}
这个方法接收两个同类型的对象作为参数,然后遍历对象的所有属性,将两个对象的属性值进行比较,将不同的属性值赋给新对象。如果两个对象的属性值相同,则保留原有对象的属性值。如果两个对象的属性值都为 null,则跳过该属性。如果两个对象的类型不同,则抛出 IllegalArgumentException 异常。
原文地址: https://www.cveoy.top/t/topic/mMp7 著作权归作者所有。请勿转载和采集!