eclipse null分析字段初始化

时间:2014-07-10 10:13:49

标签: eclipse null initialization field analysis

使用Eclipse的Null分析:

可以将其他方法定义为初始化方法而不是构造函数吗?

我有一个这样的课程:

public class Foo {

    @NonNull    
    private Object fooObject;

    public Foo() {
        super();
    }

    public void onCreate() {
        fooObject = //Something which is not available in the Constructor;
    }

这里我得到的警告是NonNull字段可能尚未初始化。是否有可能将init-method声明为初始化方法?

我可以使用@SuppressWarnings(“null”)作为构造函数。但后来我忽略了所有可能在某处实现的领域。

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

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

1 个答案:

答案 0 :(得分:1)

超出构造函数的空检查对象初始化本身就很困难。存在几种复杂的方法,所有方法都需要额外的注释。

在你的例子中,向编译器证明在访问字段之前总是调用onCreate()似乎几乎是不可能的。

已经提出了一个较弱的解决方案:@LazyNonNull,一个在最初为null的字段上使用的注释,但一旦初始化就永远不会返回null。见https://bugs.eclipse.org/bugs/show_bug.cgi?id=414237

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