将值设置为Java15记录中的属性之一

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

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

在控制器级别我有以下代码

@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的值,但是,它作为路由参数传递。现在我想在控制器级别设置值,比如

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());
    }
} 


回答

如果你需要改变一个属性,那么你需要使用 aclass而不是 a record

从JEP:

使用记录增强 Java 编程语言,记录是充当不可变数据的透明载体的类。记录可以被认为是名义元组

所以,如果你需要这种行为,你最好使用一个类。


以上是将值设置为Java15记录中的属性之一的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>