春天中Null-Safety的作用有哪些

  

春天中Null-Safety的作用有哪些?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在Java中不允许让你使用类型表示其零的安全性,但Spring框架现在在org.sprinngframework。朗包提供以下注释,以便声明API和字段的可空性:

<李>

<代码> @Nullable :用于指定参数,返回值或者字段可以作为零的注释。

<李>

<代码> @NonNull> <李>

<代码> @NonNullApi> <李>

<代码> @NonNullFields>

Spring框架本身利用了上面这几个注释,但它们也可以运用在任何基于春天的Java项目中,以声明空安全API和空安全字段。尚未支持泛型和数组元素的可空性,但应也即将发布在后来的版本.Spring Null-Safety出现在Spring5中,让我们更方便的编写空安全的代码,这叫做Null-Safety, Null-Safety不是让我们逃脱不安全的代码,而是在编译时产生警告。此类警告可以在运行时防止灾难性空指针异常(肺水肿)。

<强> @NonNull

@NonNull注释是Null-Safety的所有注释中最重要的一个,我们可以使用此注释在期望对象引用的任何地方声明非空约束:字段,方法参数或者方法返回值。

先来看一个例子

public  class  Student  {      private 才能;String 名称;      public 才能;String  getName (), {   ,,,return 名称;   ,,}   public 才能;void  setName (String 名称),{   ,,,如果(name  !=, null ,,, name.isEmpty ()) {   ,,,,,name =,空;   ,,,}   ,,,this.name =,名称;   ,,}   }

上述代码对名字的校验是有效的,但是存在一个缺陷,如果的名字被设置为零的话,那么当我们使用名字的时候,就会以NullPointerException来结尾。

<强>使用@NonNull

春季的null-safety特性能够允许<代码> 或想法者eclipse <代码> 报告这个潜在的威胁,例如,如果我们用想法对属性加上@NonNull会出现如下的效果。

春天中null-safety的作用有哪些

奇怪,并没有什么变化啊,没看见有潜在的安全提示啊,那是因为你没有在想法进行设置

<强>设置安全检查

如果你也没有提示的话,可以通过如下的方式设置安全检查

春天中null-safety的作用有哪些

如果还不好使的话,那就在右侧配置注释添加一下@NonNull和@Nullable所在的jar包,如下:

春天中null-safety的作用有哪些

添加上,打上?即可看到如下效果。

春天中Null-Safety的作用有哪些

现在fullName已经被@NonNull注释添加编译器检查null值的功能了!

如果你不相信的话,可以把@NonNull注释去掉,你的鼠标再放在姓名上,已经没有这句提示了。

<强> @NonNullFields

@NonNull注解能够帮助你确保Null-Safety。然而,如果此注释直接装饰所有的字段的话,就会污染整个代码库。

春提供了另外一个不允许为零的注解——<代码> @NonNullFields>

新建一个父类,并在该类所属包下创建一个名为<代码> package-info.java> 文件>

package-info。java

@NonNullFields   package  com.nullsafety.demo.pojo;      import  org.springframework.lang.NonNullFields;

新建一个<代码>家长。java> public  class  Parent  {      private 才能String 儿子;   private 才能;String 年龄;   private 才能;String 名称;      public 才能;void  setSon (String 儿子),{   ,,,如果(son  !=, null ,,, son.isEmpty ()) {   ,,,,,son =,空;   ,,,}   ,,,this.son =,儿子;   ,,}      public 才能;void  setAge (String 年龄),{   ,,,如果(age  !=, null ,,, age.isEmpty ()) {   ,,,,,age =,空;   ,,,}   ,,,this.age =,年龄;   ,,}      public 才能;void  setName (String 名称),{   ,,,如果(name  !=, null ,,, name.isEmpty ()) {   ,,,,,name =,空;   ,,,}   ,,,this.name =,名称;   ,,}   }

春天中Null-Safety的作用有哪些