我最近开始学习Elasticsearch,已经看了几个关于这项技术的视频,并注意到我们将方法参数中的字段标记为final。同时,当对实例使用MySQL时,我们不会用这个关键字标记参数。
为什么?因为与MySQL不同的是,在Elasticsearch中没有字段锁和事务?
例如:
让我们假设我们在应用程序中为用户提供了一个REST控制器,并且在这个控制器中基于其id返回用户。
在我们使用MySQL的情况下:
@GetMapping(“/user/{id}”)
public User getUserById(@ParhVariable Long id) {
return userRepository.getById(id).orElse(null);
}在使用Elasticsearch的情况下:
@GetMapping(“/user/{id}”)
public User getUserById(@ParhVariable final Long id) {
return userRepository.getById(id).orElse(null);
}发布于 2022-01-31 12:30:15
它没有连接到ElasticSearch或MySQL。当您将final关键字设置为您的id变量时,您就不能在getUserById方法中为这个变量分配一个新的值(在Long情况下是一个对象)。
它防止出现这种情况:
@GetMapping(“/user/{id}”)
public User getUserById(@ParhVariable Long id) {
id = 10L; // new value
return userRepository.getById(id).orElse(null); // will response with wrong entity
}在上面的代码中,程序将不返回用户期望的值。如果您在final变量上设置了id关键字,并试图为id分配新的值--程序甚至不会编译,这就防止了运行时不期望的行为。
无论是否使用final,都没有严格的规则--最常见的方法是在代码冗长复杂时使用final。
也检查this的答案。
https://stackoverflow.com/questions/70922664
复制相似问题