有谁知道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()) { ... }
当然,如果person
或otherPerson
为 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");