【发布时间】:2018-08-29 00:31:13
【问题描述】:
我需要检查某个值是否为空。如果它不为空,那么只需将一些变量设置为真。这里没有其他声明。我有太多这样的条件检查。
有什么方法可以在不检查所有方法返回值的情况下处理这种空检查?
if(country != null && country.getCity() != null && country.getCity().getSchool() != null && country.getCity().getSchool().getStudent() != null .....) {
isValid = true;
}
我想过直接检查变量并忽略NullpointerException。这是一个好习惯吗?
try{
if(country.getCity().getSchool().getStudent().getInfo().... != null)
} catch(NullPointerException ex){
//dont do anything.
}
【问题讨论】:
-
从 Java 8 开始有可选的
-
好吧,您最终可以在
getCity()上获得null值。这会导致 NPE,您无法确定null是什么 -
作为一个信息点:在创建这些类型的链之前,您应该考虑Law of Demeter。
-
这段代码是一个巨大的危险信号:如果你发现自己在编写如此深度嵌套的链,请停止、重新考虑并重写你的代码。
-
最好的解决方案是消除问题:实现这些方法,使它们永远不会返回 null。如果他们从不返回 null 那么您不必检查它。为什么 null 首先是合法的返回值?
标签: java exception nullpointerexception null