gpt4 book ai didi

Java - = 运算符不适用于 `@Controller` 中的类

转载 作者:行者123 更新时间:2023-12-01 17:29:02 25 4
gpt4 key购买 nike

我有一个类Message,它是@Controller方法中的@ModelAttribute。当我在方法内执行 message = some_message_object 时,它不会抛出任何错误,但 message 的值不会改变。相反,我必须这样做:

if(some_message_object != null) {
message.setId(some_message_object.getId()) ;
message.setFrom(some_message_object.getFrom()) ;
message.setTo(some_message_object.getTo()) ;
}

此后,messagesome_message_object 相同。如果我使用的 = 错误,请帮助我。

编辑

这是原始代码:

@RequestMapping("/readmessage")
public String readMessage(@ModelAttribute("message") Message message {
some_message_object = someService.getMessage() ;
message = some_message_object ;
}

最佳答案

Java 不会通过引用传递方法参数:修改方法的参数只会修改局部变量,而不会修改调用方法中的变量。但是,您可以通过调用对象的方法来修改对象的内容,就像您所做的那样。

假设你有

@Controller
public void method(@ModelAttribute Message message) {
message = some_message_object;
}

message可以看成是方法的局部变量,修改也是局部的。您只能对参数调用方法,而不能直接修改它们(当然可以,但调用者看不到这种修改)。

<小时/>

如果您有多个属性要从一个对象复制到另一个对象,您可以向消息添加更新方法:

public void update(Message message) {
this.field1 = message.field1;
this.field2 = message.field2;
// ...
}

或使用 bean 映射器,例如 Dozer ,它使用反射。

关于Java - = 运算符不适用于 `@Controller` 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12827336/

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