将值设置为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 编程语言,记录是充当不可变数据的透明载体的类。记录可以被认为是名义元组。
所以,如果你需要这种行为,你最好使用一个类。