在看Spring源码的时候,经常会发现有 @NonNull 或 @Nullable 注解的标记,一般是在方法上,或在 参数中,本着好奇的心里,研究下这2个注解的作用是什么呢?

1、@NonNull: org.springframework.lang.NonNull
2、@Nullable: org.springframework.lang.Nullable
3、写一段代码测试,验证 NonNull 和 Nullable 注解是否有参数验证功能
- @RunWith(SpringRunner.class)
- @SpringBootTest
- public class NullableSpringTest {
-
- @Test
- public void test() throws Exception{
- say("小明","北京市");
- say(null,null);
- }
-
- public void say(@NonNull String name , @Nullable String addr){
- System.out.println("@NonNull name ="+ name+ " ; @Nullable addr = " + addr);
- }
- }
4、执行完毕后,输出结果如下:
- @NonNull name =小明 ; @Nullable addr = 北京市
- @NonNull name =null ; @Nullable addr = null
1、根据【二-4】中测试输出的结果可知: @NonNull 或 @Nullable , 没有参数验证功能,只是一个标记注解,告知调用方:是否允许为null的情况。
2、作用范围是: 方法上、参数、字段(类属性上)
- @Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Nonnull(when = When.MAYBE)
- @TypeQualifierNickname
- public @interface Nullable {
-
- }
3、在阿里技术出品《Java工程师必读手册》 , 也提到过 @NonNull 和@Nullable 标注参数。
