Lombok的@NonNull误区

2021-02-16  本文已影响0人  扁圆柱体

问题

Lombok的@NonNull注解可以放在方法,参数或字段上。一般的误区会认为如果将该注解放到字段上会表示该字段不为空(类似一个断言),其实这是错误的。

官方文档是这么解释该注解


该注解的JavaDoc

也就是说,当注解到字段时,在生成类时,任何赋值该字段的地方会检查参数是否为空。下面是一个具体的例子

java代码如下

public class Question {
    @NonNull
    private String text;
}

反编译出的class文件代码如下

public class Question {
    @NonNull
    private String text;

    // 增加了对参数的判空,而不是对字段的判空
    public Question(@NonNull final String text) {
        if (text == null) {
            throw new NullPointerException("text is marked non-null but is null");
        } else {
            this.text = text;
        }
    }

    @NonNull
    public String getText() {
        return this.text;
    }

     // 增加了对参数的判空,而不是对字段的判空
    public void setText(@NonNull final String text) {
        if (text == null) {
            throw new NullPointerException("text is marked non-null but is null");
        } else {
            this.text = text;
        }
    }
}

结论

要断言似的要求一个类的字段不为空,不能使用Lombok的@NonNull注解,该注解只能在赋值该字段时对参数进行判空检查!

上一篇下一篇

猜你喜欢

热点阅读