Java @参数的Getter和Setter上的NotNull蕴涵
相信并使用,我有一个类,它的某些字段标记为Java @参数的Getter和Setter上的NotNull蕴涵,java,getter-setter,notnull,Java,Getter Setter,Notnull,相信并使用,我有一个类,它的某些字段标记为@NotNull[package javax.validation.constraints]以传递给客户端。该类还实现了此类字段的默认getter和setter。样本类别如下- public class MyClass { public MyClass() { } @NotNull private String name; private Boolean bool; public String ge
@NotNull
[package javax.validation.constraints
]以传递给客户端。该类还实现了此类字段的默认getter和setter。样本类别如下-
public class MyClass
{
public MyClass() {
}
@NotNull
private String name;
private Boolean bool;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean isBool() {
return bool;
}
public void setBool(Boolean bool) {
this.bool = bool;
}
}
对于getter在业务逻辑中的用法,我感到有点困惑,如下所示-
if(new MyClass().getName() !=null) {
//do something
}
此null
检查是否多余,(如果不是)好奇地想知道为什么
另外,如果它是冗余的,我想考虑设置一个null值并获取param的值。尝试一下,因为-
void test() {
myClass.setName(null);
if (myClass.getName() == null) {
System.out.println("It should not be null"); // this got printed
}
}
@NonNull
只是对工具的一个提示,它不会影响java语言本身处理null的方式。它还要求对每个交互进行适当的注释,以确保发现所有错误
在您的案例中会发生这种情况,而name
字段被注释,而与该字段交互的方法没有注释,因此工具无法对这些方法及其可空性做出任何假设
但是,如果您引入更多类似这样的注释:
public void setName(@Nullable String name) {
this.name = name; // should now have a warning
}
@NonNull
public String getName() {
return name;
}
现在工具应该指示newmyclass().getName()!=空
始终为真。它还在setName
中警告您正在将可为null的值设置为非null属性,这可能是错误的
固定的方式:
public void setName(@NonNull String name) {
// setName(null) would cause a warning
// Also add an exception if the annotation is ignored.
this.name = Objects.requireNonNull(name);
}
/* or */
public void setName(@Nullable String name) {
if (name == null) return; // Guard against setting null
this.name = name;
}
@NonNull
只是对工具的一个提示,它不会影响java语言本身处理null的方式。它还要求对每个交互进行适当的注释,以确保发现所有错误
在您的案例中会发生这种情况,而name
字段被注释,而与该字段交互的方法没有注释,因此工具无法对这些方法及其可空性做出任何假设
但是,如果您引入更多类似这样的注释:
public void setName(@Nullable String name) {
this.name = name; // should now have a warning
}
@NonNull
public String getName() {
return name;
}
现在工具应该指示newmyclass().getName()!=空
始终为真。它还在setName
中警告您正在将可为null的值设置为非null属性,这可能是错误的
固定的方式:
public void setName(@NonNull String name) {
// setName(null) would cause a warning
// Also add an exception if the annotation is ignored.
this.name = Objects.requireNonNull(name);
}
/* or */
public void setName(@Nullable String name) {
if (name == null) return; // Guard against setting null
this.name = name;
}