Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中以防空方式测试方法值的智能方法?_Java - Fatal编程技术网

Java中以防空方式测试方法值的智能方法?

Java中以防空方式测试方法值的智能方法?,java,Java,有人知道Java中是否有一种方法可以比较方法值,而不需要单独调用来检查方法是否返回null吗?例如,给一个像 public class Person{ private String name; public String getName(){ return name; } //...other stuff here } 然后在另一节课上,我们有这样一个测试: if (person.getName() != null && person.getName(

有人知道Java中是否有一种方法可以比较方法值,而不需要单独调用来检查方法是否返回null吗?例如,给一个像

public class Person{
  private String name;
  public String getName(){
     return name;
  }
  //...other stuff here
}
然后在另一节课上,我们有这样一个测试:

if (person.getName() != null && person.getName().equals(otherPerson.getName()){
  //do something
}
我想知道最干净的方法是什么?在有10个或更多成员的类中,运行这么多空检查,然后进行值比较检查,会变得很混乱

任何提示或想法都将不胜感激


谢谢

org.apache.commons.lang3.StringUtils.equals

您可以使用它在Java 7中安全地将空值彼此相等:

if (Objects.equals(person.getName(), otherPerson.getName()) { ... }

当然,如果
person
otherPerson
为空,这并不能阻止异常,您需要事先进行自己的空检查。如果您不使用7,您可以轻松编写此方法的自己版本。

使用的
@Nullable
/
@Nonnull
注释。大多数现代IDE都可以检查它们是否正确使用,如果没有,就会发出警告。

这个额外的样板文件是Java的主要缺点之一。Groovy使使用?变得更容易?。操作人员在那里,您可以简单地执行以下操作:

if (person.getName()?.equals(otherPerson.getName()){
  //do something
}
如果getName()返回null,则?。运算符返回null,表达式的计算结果为false

在Java中,最好的解决方案可能是使用Apache Commons中的StringUtils:

这使您可以执行以下操作:

StringUtils.equals(null, "abc");

@Nonnull
两个字母都是小写的n,我想谢谢你的回答!如果我可以将其添加为限制,这可能会起作用,不幸的是,这些方法被允许返回null。还有一些遗留代码。@DianaAmza我知道。我也面临同样的情况。不过:使用这些注释仍然会使事情变得更简单,更不容易出错,尤其是使用Findbugs和/或IntelliJ ideaTrue!谢谢你的提示,谢谢!这是有用的知道!同意,这有点烦人。谢谢你的建议,我不知道。