Java 降低圈复杂度

Java 降低圈复杂度,java,complexity-theory,Java,Complexity Theory,如何降低以下代码的圈复杂度 public class AnswerTypeEnumConverter implements CustomConverter { public Object convert(Object destination, Object source, Class destinationClass, Class sourceClass) ... 方法convert()来自接口CustomConverter,它是我的项目中预定义的接口,是作为jar提供的,因

如何降低以下代码的圈复杂度

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);
下面是
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; 
} 
公共对象转换(对象目标、对象源、类目标类、类源类){
对象destinationValue=目的地;
如果(source==null){
info(“应用程序对象为NULL,已停止转换并返回NULL”);
返回null;
} 
如果(destinationValue==null){
destinationValue=new KYExchangeTransfer();
} 
destinationValue=setRequest(((应用程序)源),((KYExchangeTransfer)destinationValue));
返回destinationValue;
} 

如何降低复杂性?

您应该删除if、else if、else、switch、while等(每个流指令),并将它们移动到另一种方法或使用适当的设计模式


例如,您应该将长if-else链更改为多态性

您应该删除if、else-if、else、switch、while等(每个流指令),并将它们移动到另一种方法或使用适当的设计模式


例如,您应该将长if-else链更改为多态性

而不查看
convert
方法的代码,这很难帮助您更改它……圈复杂度是由大量if-else语句造成的。这通常是一种代码气味,表明缺乏抽象性。我编辑了这个问题以包含您的源代码。如果我转录错误,请告诉我。这里可能重复的是我的convert()方法的代码没有看到
convert
方法的代码,很难帮助您更改它…圈复杂度是由大量if-else语句造成的。这通常是一种代码气味,表明缺乏抽象性。我编辑了这个问题以包含您的源代码。请让我知道我是否转录错误。此处可能重复的是我的convert()方法代码convert()方法代码中有3个if语句,每个都有不同的返回类型。。。。为每种方法编写一个单独的方法是否可行且正确。。。。。我试着把这些都放在一个单独的方法,但结果是相同的soanr。。。提前谢谢,那么我该怎么做呢……你们说的是3条if语句,但在上面的代码中,我只看到了2条if语句。您正在展示的代码没有这么大的圈复杂度。你做错了什么。若代码中的更改在圈复杂度上并没有差别,那个么可能你们在寻找错误的方法。仔细检查所需的一切。在我的代码中,convert()有3个if语句,每个都有不同的返回类型。。。。为每种方法编写一个单独的方法是否可行且正确。。。。。我试着把这些都放在一个单独的方法,但结果是相同的soanr。。。提前谢谢,那么我该怎么做呢……你们说的是3条if语句,但在上面的代码中,我只看到了2条if语句。您正在展示的代码没有这么大的圈复杂度。你做错了什么。若代码中的更改在圈复杂度上并没有差别,那个么可能你们在寻找错误的方法。仔细检查所需的一切。
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; 
}