public class ObjectCopier {
public static void copyNullProperties(Object v1, Object v2){
Field[] fieldsV1 = v1.getClass().getDeclaredFields();
Field[] fieldsV2 = v2.getClass().getDeclaredFields();
for (Field fieldV1 : fieldsV1) {
try {
fieldV1.setAccessible(true);
if (fieldV1.get(v1) == null) {
for (Field fieldV2 : fieldsV2) {
fieldV2.setAccessible(true);
if (fieldV1.getName().equals(fieldV2.getName())) {
Object value = fieldV2.get(v2);
fieldV1.set(v1, value);
}
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
使用
// 使用示例
MyClass v1 = new MyClass();
v1.setField1("someValue"); // 假设v1的field1已被设置
MyClass v2 = new MyClass();
v2.setField1("123");
v2.setField2(42);
copyNullProperties(v1, v2); // 现在v1的field2被设置为42,而field1仍然保持为"someValue"
System.out.println(v1);