Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免在不同情况下重复相同的if案例_Java - Fatal编程技术网

Java 避免在不同情况下重复相同的if案例

Java 避免在不同情况下重复相同的if案例,java,Java,我有以下代码: if (product != null) { //tryToGetProductFromOnePlace } if (product != null) { //tryToGetProductFromSecondPlace } if (product != null) { //tryToGetProductFromThirdPlace } if (product != null) { //tryToGetProductFromFourthPla

我有以下代码:

if (product != null) {
    //tryToGetProductFromOnePlace 
}
if (product != null) {
    //tryToGetProductFromSecondPlace 
}
if (product != null) {
    //tryToGetProductFromThirdPlace 
}
if (product != null) {
    //tryToGetProductFromFourthPlace
}
return product;

我想重构这段代码,让它看起来更好,但我没有任何想法。我不能使用递归,因为获取产品的逻辑总是不同的。在if的情况下,我不能返回它,因为我需要得到值,并且只有当这4个组合都不正常时,才返回null。有关于如何改进代码的建议吗?

您可以重写方法以返回
可选
值,而不是
null
,然后使用
可选
方法链接它们:

return this.tryToGetProductFromOnePlace()
    .or(this::tryToGetProductFromSecondPlace)
    .or(this::tryToGetProductFromThirdPlace)
    .or(this::tryToGetProductFromFourthPlace);

如果出于某种原因,您需要保留返回
null
的外部接口,而不是为缺少的值保留
Optional.empty()(Offer Offer,String productId){return getProductVendorForCollectiveTreaty(Offer,productId).orElse(getProductVendorForParentMasterTreaty(Offer,productId).orElse(getProductVendorForSubParentMasterTreaty)(Offer,productId).orElse(null));}
实际上我想做的是:
私有产品供应商或响应evaluateProductVendor(Offer Offer,String productId){返回tryToGetProductFromOnePlace().OrelGet(()->tryToGetProductFromSecondePlace().OrelGet()->tryToGetProductFromThirdPlace().OrelGet(()->tryToGetProductFromFourthPlace().orElse(null));}