Java 简化陈述

Java 简化陈述,java,if-statement,boolean,Java,If Statement,Boolean,请任何人帮助或建议简化以下条件: if (null == parentInstruction.getQuantity() || (null != parentInstruction.getQuantity() && ( (parentInstruction.getQuantity().compareTo(BigDecimal.ZERO) == 0 && !canSkipTransTypeCds(pare

请任何人帮助或建议简化以下条件:

if (null == parentInstruction.getQuantity() || 
       (null != parentInstruction.getQuantity() && 
           (
           (parentInstruction.getQuantity().compareTo(BigDecimal.ZERO) == 0 && !canSkipTransTypeCds(parentInstruction)) || 
           (parentInstruction.getQuantity().compareTo(BigDecimal.ZERO) != 0)
           )
       )
   )  {
   return true;
}

虽然我通常喜欢单if语句,但如果代码变得不可读,最好将其拆分

if(parentInstruction.getQuantity() == null)
  return true;
if(parentInstruction.getQuantity().compareTo(BigDecimal.ZERO) != 0)
  return true;
if(!canSkipTransTypeCds(parentInstruction))
  return true;
在第一条if语句parentInstruction.getQuantity之后,不能†为null,否则它将已返回,因此无需检查!=空

在第二条if语句之后,parentInstruction.getQuantity将始终†为0,否则它将已返回,因此无需检查==0


†:除非调用.getQuantity会同时更改值,但由于它是一个getter,我们假设它不会更改返回值。

如果您真的想要一行,它可以归结为:

如果BigDecimal.ZERO.equalsparentInstruction.getQuantity | |!CANSKIPTTRANSTYPECDSPARENTINStruction
返回true;这个条件的作用是什么?我想添加.compareToBigDecimal.ZERO==0如何简化为.equalsBigDecimal.ZERO,但我并不认为这是必要的。但是使用BigDecimal.ZERO.equals。。。防止潜在的NPE是明智的;使代码更加简单,并且仍然是一个单一的检查,因此+1来自我。