[英]Java Predicate implementation can't access global final variable
我使用 java 和 springboot 创建了一个简单的 rest 服务。 这是我的服务层代码
@Service
class MyService {
private final TestService service;
@Autowired
public MyService(final TestService service) {
this.service = service;
}
// here is the issue
private final Predicate<User> userPredicate = (user) -> this.service.isValidUser(user);
}
在上面的行中,抱怨变量服务的 ide 可能没有被初始化,我不能在谓词实现中使用它。 我尝试将 final 删除到服务中,这是可行的,但我不想将 final 删除到 TestService 声明中。
任何人有任何解决方案?
执行顺序是:首先按词法顺序(文件从上到下)解析所有初始化表达式,然后运行构造函数。
换句话说,该userPredicate =
行在您的this.service = service;
之前运行。 线。 它注定要失败,编译器知道,所以它会拒绝编译这段代码。
修复很简单 - 将userPredicate
初始化移动到构造函数中:
private final TestService service;
private final Predicate<User> userPredicate;
@AutoWired
public MyService(TestService service) {
this.service = service;
this.userPredicate = user -> service.isValidUser(user);
}
对于它的价值,如果您除了制作该 userPredicate 之外不需要任何service
,不妨完全摆脱service
字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.