我使用 java 和 springboot 创建了一个简单的休息服务。这是我的服务层代码
@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);
}
Run Code Online (Sandbox Code Playgroud)
在上面的行中,抱怨变量服务的 ide 可能未初始化,并且我无法在谓词实现中使用它。我尝试删除服务中的final,这有效,但我不想删除TestService 声明中的final。
有人有什么解决办法吗?
执行顺序是:首先按词法顺序解析所有初始化表达式(从上到下通过文件),然后运行构造函数。
换句话说,该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);
}
Run Code Online (Sandbox Code Playgroud)
就其价值而言,如果您除了创建 userPredicate 之外不需要service任何东西,不妨完全删除该service字段。
| 归档时间: |
|
| 查看次数: |
345 次 |
| 最近记录: |