繁体   English   中英

Java 谓词实现无法访问全局最终变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM