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;
}