我对以下代码块(示例)的执行有一个基本的疑问:
String version = computer.getSoundcard().getUSB().getVersion();
如果 Soundcard 不存在,可能会抛出 NullPointerException。
所以我有,
选项 1:
if(computer!=null &&
computer.getSoundCard() !=null &&
computer.getSoundCard().getUSB()!=null) {
version = computer.getSoundcard().getUSB().getVersion();
}
选项 2:
if(computer !=null){
SoundCard sc = computer.getSoundCard();
if(sc!=null){
USB usb = sc.getUSB();
if(usb!=null){
version = usb.getVersion();
}
}
}
根据我的理解,选项 1 将有额外的开销,因为它必须多次评估相同的表达式,例如 computer.getSoundCard() 3 次, computer.getSoundCard().getUSB() 2 次。
我的理解正确吗?
编辑 1: 将选项 2 从
更改为version = computer.getSoundcard().getUSB().getVersion();
最佳答案
更好的方法是将这个 USB 版本获取代码提取到另一个方法中,比如 getComputerUsbVersion(),然后将超长的 if 或嵌套的 if-else block 分成几个简单的 if block :
public String getComputerUsbVersion(Computer computer) {
if (computer == null) return null;
SoundCard soundCard = computer.getSoundCard();
if (soundCard == null) return null;
USB usb = soundCard.getUSB()
if (usb == null) return null;
return usb.getVersion();
}
如您所见,代码更加简洁易懂,超长的if条件或嵌套的if-else block 也被避免了。您甚至可以在以后非常轻松地向此方法添加更多条件检查代码。
关于java Nested If 或 single if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32643048/