有没有人知道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个或更多成员的类中,运行如此多的空检查然后进行值比较检查会变得混乱。
非常感谢任何提示或想法!
谢谢!
答案 0 :(得分:5)
您可以使用Objects.equals
在Java 7中安全地将空值等同于:
if (Objects.equals(person.getName(), otherPerson.getName()) { ... }
当然,如果person
或otherPerson
为空,这不会停止异常,您需要事先进行自己的空检查。如果您不使用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(null, "abc");