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

时间:2014-01-07 12:55:36

标签: java

有没有人知道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个或更多成员的类中,运行如此多的空检查然后进行值比较检查会变得混乱。

非常感谢任何提示或想法!

谢谢!

4 个答案:

答案 0 :(得分:5)

您可以使用Objects.equals在Java 7中安全地将空值等同于:

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

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

答案 1 :(得分:1)

org.apache.commons.lang3.StringUtils.equals

答案 2 :(得分:1)

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

答案 3 :(得分:0)

这个额外的样板是Java的主要缺点之一。使用Groovy可以更轻松地使用?运营商。在那里你可以做到:

if (person.getName()?.equals(otherPerson.getName()){
  //do something
}

如果getName()返回null,则为?。 operator返回null,表达式计算为false。

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

  

StringUtils.equals(CharSequence, CharSequence)

这可以让你做类似的事情:

StringUtils.equals(null, "abc");