Java 简化条件算法的Intellij检查规则
我们有一些简短的方法可以将一些值从一个域转换到另一个域,它通常有一个巨大的Java 简化条件算法的Intellij检查规则,java,intellij-idea,sonarqube,Java,Intellij Idea,Sonarqube,我们有一些简短的方法可以将一些值从一个域转换到另一个域,它通常有一个巨大的开关块或几个ifs,例如: private DomainB translateSomething(final DomainA data) { DomainB result = null; if (data != null) { if (CONSTANT_A_VALUE_X.equals(data)) { result = CONSTANT_B_VALU
开关
块或几个ifs
,例如:
private DomainB translateSomething(final DomainA data) {
DomainB result = null;
if (data != null) {
if (CONSTANT_A_VALUE_X.equals(data)) {
result = CONSTANT_B_VALUE_X;
} else if (CONSTANT_A_VALUE_Y.equals(data)) {
result = CONSTANT_B_VALUE_Y;
} else if (CONSTANT_A_VALUE_Z.equals(data)) {
result = CONSTANT_B_VALUE_Z;
} else {
result = CONSTANT_B_VALUE_W;
}
}
return result;
}
它可能是一个开关,而不是if
,或者每个结果可能有多个条件,或者甚至在方法参数上接收多个域,以帮助确定单个结果,这就是为什么它不能是映射
当我看到这一点时,我对第一个条件应用短路,并移除所有else
块,而不是将值赋给最终将返回的变量,我将返回放在条件本身内,产生以下代码:
private DomainB translateSomething(final DomainA data) {
if (data == null) {
return null;
}
if (CONSTANT_A_VALUE_X.equals(data)) {
return CONSTANT_B_VALUE_X;
}
if (CONSTANT_A_VALUE_Y.equals(data)) {
return CONSTANT_B_VALUE_Y;
}
if (CONSTANT_A_VALUE_Z.equals(data)) {
return CONSTANT_B_VALUE_Z;
}
return CONSTANT_B_VALUE_W;
}
我已经做了好几次了,我知道IntelliJ对检查规则很有帮助,IntelliJ上有没有一些规则建议这样做?您可以使用“将返回移到更接近值计算的位置…”快速修复与结果计算检查分离的“返回”(Java |代码风格问题|'返回'与结果计算分离),然后应用“删除冗余的'else'”快速修复冗余的'else'检查(Java |控制流问题|冗余的'else')
我意识到这并不是您所要求的,但另一种方法可能是为这些类型中的每一种提供自定义转换器。如果转换足够相似(它们看起来很相似,因为您所有的返回都是类型DomainB
),您可以为转换器创建一个代码模板,并在需要时从该模板创建另一个。我已提高了这些模板的严重性,然后它开始按预期报告!