【问题标题】:eclipse null analysis field initializationeclipse空分析字段初始化
【发布时间】:2014-07-10 10:13:48
【问题描述】:

使用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 方法声明为初始化方法?

我可以使用@SuppressWarnings("null") 作为构造函数。但后来我忽略了所有可能在某处实例化的字段。

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

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

【问题讨论】:

  • 为什么@Nullable 注释会强制您检查空值?如果您知道之前已调用过 onCreate(),则无需检查是否为 null。 Null 分析只是帮助您识别错误的工具。你应该比工具更了解。

标签: eclipse null initialization field analysis


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-02-23
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2019-10-04
    相关资源
    最近更新 更多