春天中Null-Safety的作用有哪些?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
在Java中不允许让你使用类型表示其零的安全性,但Spring框架现在在org.sprinngframework。朗包提供以下注释,以便声明API和字段的可空性:
- <李>
<代码> @Nullable 代码>:用于指定参数,返回值或者字段可以作为零的注释。
李> <李><代码> @NonNull> 代码:与上述注释相反,表明指定参数,返回值或者字段不允许为null。(不需要@NonNullApi和@NonNullFields适用的参数/返回值和字段)
李> <李><代码> @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会出现如下的效果。
奇怪,并没有什么变化啊,没看见有潜在的安全提示啊,那是因为你没有在想法进行设置
<强>设置安全检查强>
如果你也没有提示的话,可以通过如下的方式设置安全检查
如果还不好使的话,那就在右侧配置注释添加一下@NonNull和@Nullable所在的jar包,如下:
添加上,打上?即可看到如下效果。
现在fullName已经被@NonNull注释添加编译器检查null值的功能了!
如果你不相信的话,可以把@NonNull注释去掉,你的鼠标再放在姓名上,已经没有这句提示了。
<强> @NonNullFields 强>
@NonNull注解能够帮助你确保Null-Safety。然而,如果此注释直接装饰所有的字段的话,就会污染整个代码库。
春提供了另外一个不允许为零的注解——<代码> @NonNullFields> 代码。这个注解适合用在包级别上,通知我们的开发工具注释包中所有的字段,默认的,不允许为空
新建一个父类,并在该类所属包下创建一个名为<代码> package-info.java> 代码的类,创建的不是Java类,而是创建的<代码>文件> 代码,名为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的作用有哪些