init 方法中的 @Nonnull 字段

@Nonnull fields in an init method

有没有办法让 Eclipse 意识到 @Nonnull 字段已经在一些初始化方法中初始化了。我正在寻找类似 @​​EnsuresNonNull({"bar"}) 的东西,否则完全无法使用 Checker Framework。

示例:

import javax.annotation.Nonnull;
public class Foo{
    @Nonnull String foo;
    public Foo(){
        init();
    }
    //need something like @EnsuresNonNull({"foo"});
    public void init(){
        foo="foo";
    }
}

出现以下错误:

The @Nonnull field foo may not have been initialized

据我所知,Eclipse 目前没有此功能。您可以查看 a list of supported annotations.

的文档

Eclipse 目前提供的注释集比 Checker Framework 更为有限。这意味着程序员无法表达关于他们的程序的尽可能多的事实,因此 Eclipse 工具发出更多误报警告,您必须查看或不合理地抑制这些警告。另一方面,Eclipse 工具速度更快,并且与开发环境集成得更好;这是关于你想使用哪个的权衡。

Eclipse 开发人员不断努力改进他们的工具,而且他们很友好。因此,我相信他们会欢迎您的建议或补丁。

很遗憾 Checker Framework 没有为您解决。您的经验并不典型:Google 每天在数百个项目上运行 Checker Framework,还有很多其他成功案例。您可以随时提交 bug report; Checker Framework 开发人员也很友好。