java - 将值设置为 Java 15 记录中的属性之一

标签 java java-15 java-record

我在我的代码中使用 Java 15 预览功能记录,并将记录定义如下

public record ProductViewModel
        (
                String id,
                String name,
                String description,
                float price
        ) {
}
在 Controller 级别我有以下代码
@Put(uri = "/{id}")
public Maybe<HttpResponse> Update(ProductViewModel model, String id) {
        LOG.info(String.format("Controller --> Updating the specified product"));
        return iProductManager.Update(id, model).flatMap(item -> {
            if(item == null)
                return Maybe.just(HttpResponse.notFound());
            else
                return Maybe.just(HttpResponse.accepted());
        });
    }
从模型中的 UI 值 id 没有传递,但是,它作为路由参数传递。现在我想在 Controller 级别设置值,例如
model.setid(id) // Old style
如何将值设置为记录特定属性

最佳答案

你不能。记录属性是不可变的。但是,您可以做的是添加一个凋零来创建一个具有相同属性但新 id 的新记录:

public record ProductViewModel(String id,
                               String name, 
                               String description,
                               float price) {

    public ProductViewModel withId(String id) {
        return new ProductViewModel(id, name(), description(), price());
    }
} 

关于java - 将值设置为 Java 15 记录中的属性之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65253856/

相关文章:

java - c++中具有相同名称的局部变量和形式参数?

java - 如何通过流式休息提供大文件?

java - 如何创建由 Map 支持的可变列表

java - Java 记录是否支持 "with"语法?

java - jlink :ed application throws exception中的记录

java - Spring 3 @Autowired 在 Formatter 中抛出 NPE

java - 为什么 java 编译器不提示 "\s"?

java - 可重入锁实现细节

spring-boot - 如何在Spring Boot Gradle项目中将时间戳附加到jar中?

Java 记录和每个文件的单个类限制