我在代码中使用Java15预览特性记录,并将记录定义如下
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的值不会被传递,但是它会作为route参数传递。现在我想在控制器级别设置值,比如
model.setid(id) // Old style
如何设置记录特定属性的值
3条答案
按热度按时间yqyhoc1h1#
如果需要对属性进行变异,则需要使用
class
而不是record
.来自jep:
用记录增强java编程语言,记录是充当不可变数据的透明载体的类。记录可以看作是名义元组。
因此,如果需要这种行为,最好使用类。
vuv7lop32#
您不能修改它们。从oracle页面:
记录类是一个简单的不可变的、透明的载体,用于一组固定的值,称为记录组件。java语言为声明记录类提供了简洁的语法,其中记录组件在记录头中声明。记录头中声明的记录组件列表构成记录描述符。
从java语言规范第8.10节可以看到以下内容:
记录声明是隐式的最终声明。允许记录类的声明冗余地指定最终
和
8.10.3记录成员
对于出现在记录组件列表中的每个记录组件,记录类都有一个隐式声明的字段,该字段的名称与记录组件的名称相同,类型与记录组件的声明类型相同。此字段被声明为private和final。使用出现在相应记录组件上的注解(如果有)对字段进行注解,这些注解的注解类型适用于字段声明上下文或类型上下文,或两者都适用。
vc9ivgsu3#
你不能。记录属性是不可变的。但是,您可以添加一个wither来创建一个具有相同属性但具有新id的新记录: