@Nonnull、@Nullable、空对象模式

tech2023-01-19  106

Spring中: 

package org.springframework.lang; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.annotation.Nonnull; import javax.annotation.meta.TypeQualifierNickname; @Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Nonnull @TypeQualifierNickname public @interface NonNull { } package org.springframework.lang; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.annotation.Nonnull; import javax.annotation.meta.TypeQualifierNickname; import javax.annotation.meta.When; @Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Nonnull( when = When.MAYBE ) @TypeQualifierNickname public @interface Nullable { }

@Nonnull、@Nullable( JSR305引入)可以用在方法、参数、变量上。@Nonnull表示不可以为Null,@Nullable表示可以为Null。想在加了@Nonnull后编码传入Null时有非空警告,必须有FindBugs插件配合,或者使用IDEA;运行时不检查。

JDK中:

package com.sun.istack.internal; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Documented @Retention(RetentionPolicy.CLASS) @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE}) public @interface NotNull { }

 @NotNull( JSR303引入)可以用在方法、参数、变量、本地变量(var)中,运行时检查。

类似注解:

@Null 被注释的元素必须为null @NotNull 被注释的元素不能为null,可以为空字符串 @AssertTrue 被注释的元素必须为true @AssertFalse 被注释的元素必须为false @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @Size(max,min) 被注释的元素的大小必须在指定的范围内。 @Digits(integer,fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内 @Past 被注释的元素必须是一个过去的日期 @Future 被注释的元素必须是一个将来的日期 @Pattern(value) 被注释的元素必须符合指定的正则表达式。 @Email 被注释的元素必须是电子邮件地址 @Length 被注释的字符串的大小必须在指定的范围内 @Range 被注释的元素必须在合适的范围内 @NotEmpty:用在集合类上,不能为null,并且长度必须大于0 @NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0

参考:jianshu.com/p/32327ca2365f

空对象模式用来替代Null,和@Nonnull一样可以避免NPE(Null Point Exception)。参考:https://www.runoob.com/design-pattern/null-object-pattern.html

最新回复(0)