eclipse空分析字段初始化

eclipse空分析字段初始化,eclipse,null,initialization,field,analysis,Eclipse,Null,Initialization,Field,Analysis,使用Eclipse的空分析: 是否可以将其他方法定义为构造函数以外的初始化方法 我有一门课是这样的: public class Foo { @NonNull private Object fooObject; public Foo() { super(); } public void onCreate() { fooObject = //Something which is not available in t

使用Eclipse的空分析:

是否可以将其他方法定义为构造函数以外的初始化方法

我有一门课是这样的:

public class Foo {

    @NonNull    
    private Object fooObject;

    public Foo() {
        super();
    }

    public void onCreate() {
        fooObject = //Something which is not available in the Constructor;
    }
这里我得到一个警告,非空字段可能尚未初始化。是否有可能将init方法声明为初始化方法

我可以对构造函数使用@SuppressWarnings(“null”)。但是我忽略了所有字段,它们可能在某处实例化

我看到的第二个机会是将fooObject设置为@Nullable,但每次使用fooObject时,我都需要检查null


那么有更好的解决方案吗?

在构造函数之外检查对象初始化的空值本质上是困难的。存在几种复杂的方法,所有这些方法都需要额外的注释

在您的示例中,向编译器证明onCreate()总是在访问字段之前被调用,这几乎是不可能的

有人提出了一个较弱的解决方案:@LazyNonNull,一个用于最初为null的字段的注释,但一旦初始化就不能返回null。看


显然,在调用构造函数(带参数)之前收集所有必要值的静态工厂方法更容易正确使用。

为什么@Nullable注释会强制您检查null?如果您知道以前调用过onCreate(),则不需要检查null。空分析只是帮助您识别错误的工具。你应该比工具更清楚。