草庐IT

java Nested If 或 single if

coder 2023-08-28 原文

我对以下代码块(示例)的执行有一个基本的疑问:

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/

有关java Nested If 或 single if的更多相关文章

随机推荐