我使用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
字段。