Checker Framework 的 Nullness Checker在遇到未初始化的字段时会生成错误。
[ERROR] /home/glts/src/example/src/main/java/BookRepositoryImpl.java:[39,7]
error: [initialization.fields.uninitialized] the constructor does not initialize fields: em
现在,通过依赖注入注入一些字段是一种常见的模式:
@Repository
public class BookRepositoryImpl implements BookRepository {
@PersistenceContext
private EntityManager em;
@Override
@Nullable
public Book findById(int id) {
return em.find(Book.class, id);
}
// ...
}
在这里,@javax.persistence.PersistenceContext
注释确保在构建存储库em
后将持有对EntityManager
实例的引用。
更一般地说,在这些情况下,应用程序框架保证字段在使用时已初始化且非空——但检查器框架无法知道这一点。
到目前为止,我发现一种补救方法是将字段注入转换为构造函数注入(@Inject
)。但是,在上面的示例中,这不是一个选项。
有没有办法告诉 Checker Framework 一个字段被注入,因此被正确初始化和非空,而不是简单地抑制这些错误?