为什么Eclipse null分析忽略空检查语句:if(someObject!= null){...},当someObject是字段范围变量时?

时间:2014-05-20 10:32:40

标签: java eclipse null

我有一个这样的课程:

import javax.annotation.Nullable;
public class Nullness {

    private @Nullable Object someObject;

    public void foo() {
        if (someObject != null) {
            someObject.toString(); //error "Potential null pointer access: The field someObject is specified as @Nullable"
        }
    }
}

当启用eclipse null分析时,会在someObject.toString();语句Potential null pointer access: The field someObject is specified as @Nullable处标记错误。

Eclipse有一个快速修复,可以将我的代码更改为:

    public void foo() {
        final Object someObject2 = someObject;
        if (someObject2 != null) {
            someObject2.toString();
        } 
    }

可以消除错误,请注意,实际上,不需要final修饰符来使错误消失。

我不明白为什么Eclipse不允许我直接在空值检查语句if (someObject != null)中使用字段变量,但强迫我创建其他局部变量someObject2。这种行为只是一个错误还是故意的?

1 个答案:

答案 0 :(得分:-1)

必须在不仔细研究的情况下发布问题,向社区道歉。 this wiki中明确提到了这个问题,它讨论了直接使用字段变量会在几个方面造成意外影响。