gpt4 book ai didi

java - 在 Java 中修补对象更新属性的智能方法

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:44 25 4
gpt4 key购买 nike

所以我想知道是否有一个简单干净的没有太多模板的解决方案来更新java中的对象。所以这基本上是我想要实现的目标以及我可以使用的替代解决方案,但在我看来这有点麻烦/乏味:

public class User {
private String name;
private Address address;
private String phoneNumber;
private Integer age;

//Wanted solution
public void patchUser(User otherUser) throws ClassNotFoundException, IllegalAccessException {
for (Field field : Class.forName(User.class.getName()).getDeclaredFields()) {
field.setAccessible(true);
if (field.get(otherUser) != null) {
this.field = field;
}
}
}

//Alternate working solution
public void patchUser2(User otherUser) {
if (!this.getName().equalsIgnoreCase(otherUser.getName())) {
this.setName(otherUser.getName());
}

if (!this.getAddress().equals(otherUser.getAddress())) {
this.setAddress(otherUser.getAddress());
}

//... etc.
}

}

所以第一个 patchUser(...) 方法是我想要实现的,如果有可能的话,我似乎无法弄清楚。如果我向我的用户添加一个新字段,那就太好了,那么该字段将在第一个选项中自动处理,而在第二个解决方案中,我必须记住手动添加对该字段的检查。

编辑 1 所以我要寻找的是我是否已给予 User 对象:

OldUserObject {
"name": "John",
"Address": {
"Street": "Avenue 1"
},
"phoneNumber": "12345678",
"age": 37
}

NewUserObject {
"name": "Peter",
"Address": null,
"phoneNumber": "12345679",
"age": null
}

因此,当用户现在注册时,他想要更改有关自己的一些信息,因此我收到一个新对象,并且根据用户想要更改的内容,我只获取他/她想要更改的那些字段的值,其他字段可能为空,如上例所示,如果它们是这样或如果它们未更改,则不应在旧对象上更新它们,因此我最终会得到这样的对象:

OldUserObject {
"name": "Peter",
"Address": {
"Street": "Avenue 1"
},
"phoneNumber": "12345679",
"age": 37
}

最佳答案

我会选择“改进的”第二种方式。
使用 Optional 来保持简洁和直接:

class Test{
private String s;
private int i;

public Test(String s, int i){
this.s = s;
this.i = i;
}

public void patchTest(Test t){
Optional.ofNullable(t.s).ifPresent(this::setS);
Optional.ofNullable(t.i).ifPresent(this::setI);
}

//setter setS and setI
}

现在,这是一个简单的示例,但可以使用映射以更通用的方式执行此操作。

关于java - 在 Java 中修补对象更新属性的智能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50797693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com