Java 中以证明 null 的方式测试方法值的智能方法



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

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

谢谢!

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

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

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

org.apache.commons.lang3.StringUtils.equals

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

这个额外的样板是Java的主要缺点之一。Groovy使这更容易与?。算子。在那里,您可以简单地执行以下操作:

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

如果 getName() 返回 null,则 ?. 运算符返回 null,并且表达式的计算结果为 false。

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

StringUtils.equals(CharSequence, CharSequence)

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

StringUtils.equals(null, "abc");

最新更新