【发布时间】:2021-08-04 23:29:41
【问题描述】:
以下是我的代码,Sonar 正在抱怨它。要求制作 15,现在是 19。重构此方法以将其认知复杂性从 19 降低到允许的 15。我尝试使用不起作用的枚举。并且它的 transactionId 为 RequestParam。是否有任何 eclipse 工具可以提取这个或者我们需要手动完成。
@GetMapping(value = "display",produces = APPLICATION_JSON_VALUE)
@ResponseBody
public List<RspNotification> display(@RequestParam(name = Constants.TRANSACTION_ID) final String transactionId)
{
List<RspNotification> list = new ArrayList<>();
if (manageProductOrderCISStore.get(transactionId) != null)
{
list.add(manageProductOrderCISStore.get(transactionId));
}
else if (manageAppointmentWWMStore.get(transactionId) != null)
{
list.add(manageAppointmentWWMStore.get(transactionId));
}
else if (manageAppointmentHWMStore.get(transactionId) != null)
{
list.add(manageAppointmentHWMStore.get(transactionId));
}
else if (manageAppointmentUnifyStore.get(transactionId) != null)
{
list.add(manageAppointmentUnifyStore.get(transactionId));
}
else if (manageAppointmentUnifyXmlStore.get(transactionId) != null)
{
list.add(manageAppointmentUnifyXmlStore.get(transactionId));
}
else if (manageProductOrderFLSStore.get(transactionId) != null)
{
list.add(manageProductOrderFLSStore.get(transactionId));
}
else if (manageProductOrderHFSStore.get(transactionId) != null)
{
list.add(manageProductOrderHFSStore.get(transactionId));
}
else if (fulfilmentQuoteEEStore.get(transactionId) != null)
{
list.add(fulfilmentQuoteEEStore.get(transactionId));
}
else if (manageInventoryHFSStore.get(transactionId) != null)
{
list.add(manageInventoryHFSStore.get(transactionId));
}
else if (manageInventoryFLSStore.get(transactionId) != null)
{
list.add(manageInventoryFLSStore.get(transactionId));
}
else if (manageBillingDocumentStore.get(transactionId) != null)
{
list.add(manageBillingDocumentStore.get(transactionId));
}
else if (serviceHealthStore.get(transactionId) != null)
{
list.add(serviceHealthStore.get(transactionId));
}
else if (fulfilmentOrderEEStore.get(transactionId) != null)
{
list.add(fulfilmentOrderEEStore.get(transactionId));
}
else if (manageWorkOrderUnifyStore.get(transactionId) != null)
{
list.add(manageWorkOrderUnifyStore.get(transactionId));
}
else if (manageDiagnosticAssuranceStore.get(transactionId) != null)
{
list.add(manageDiagnosticAssuranceStore.get(transactionId));
}
else if (materialsSupplyUnifyStore.get(transactionId) != null)
{
list.add(materialsSupplyUnifyStore.get(transactionId));
}
///////// more if statement
return list;
}
非常感谢任何帮助,枚举将不起作用。
【问题讨论】:
-
相同的代码副本粘贴了 3000 次;这显然是错误的。因此,分解重复的内容。似乎您重复了一个清晰的模式-这意味着拉出一种方法。但签名并不是那么简单——你需要一个 lambda。一旦你有了一个 lambda,你就可以静态存储它,因为它是对行为而不是数据的引用……一旦你可以静态存储它。枚举!!
-
你知道你的列表总是有 0 或 1 个元素,对吧?
标签: java spring-boot sonarqube java-11