如何降低以下代码的圈复杂度
public class AnswerTypeEnumConverter implements CustomConverter {
public Object convert(Object destination, Object source, Class destinationClass, Class sourceClass)
...
方法convert()
来自接口CustomConverter
,它是我项目中的预定义接口,并以jar形式提供,因此我无法更改convert()
方法的签名,这是
Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass);
我使用的是SONAR 3.6,它显示的错误为:
The Cyclomatic Complexity of this method is 15 which is greater than 10 authorized.
以下是convert
方法的代码
public Object convert(Object destination, Object source, Class<?> destinationClass, Class<?> sourceClass) {
Object destinationValue = destination;
if (source == null) {
LOGGER.info("APPLICATION OBJECT IS NULL CONVERSION STOPPED AND RETURNING NULL");
return null;
}
if (destinationValue == null) {
destinationValue = new KYExchangeTransfer();
}
destinationValue = setRequest(((Application) source), ((KYExchangeTransfer) destinationValue));
return destinationValue;
}
我如何降低复杂性?
答案 0 :(得分:4)
你应该删除if,else if,else,switch,while等(每个流指令)并将它们移动到另一个方法或使用适当的设计模式。
例如,您应该将long if else链更改为多态