美文网首页
Lombok的@NonNull误区

Lombok的@NonNull误区

作者: 扁圆柱体 | 来源:发表于2021-02-16 09:28 被阅读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注解,该注解只能在赋值该字段时对参数进行判空检查!

    相关文章

      网友评论

          本文标题:Lombok的@NonNull误区

          本文链接:https://www.haomeiwen.com/subject/qokvxltx.html