我目前正在从事一个项目,该项目将减少其他几个班级使用的班级。
if(condition_A)
{
doSomething();
}
else if(condition_B)
{
classToBeRemoved();
}
else
{
doAnother();
}
我想到的第一个解决方案是否定将要修改的if-else语句的条件。
if(condition_A)
{
doSomething();
}
else if(!condition_B)
{
doAnother();
}
这种重构方法不会影响代码的功能,但有时如果条件太长,则会影响代码的可读性。
除了否定条件外,还有其他方法可以保持代码的可读性吗?
答案 0 :(得分:0)
也许带有功能,大概是这样的:
List<BooleanSupplier> actions = new ArrayList<>();
actions.add(() -> {
if (!condition_A) {
return false;
}
doSomething();
return true;
});
actions.add(this::canDoSomething);
if (!actions.stream().anyMatch(p::get)) {
doAnother();
}
我自由地将条件+动作抽象为谓词,而不是使用Pair等。
这很丑陋,但可以解耦,因为现在添加的内容可以来自该类的外部,从而定义了public void addAction(BooleanSupplier action)
。
尽管可能需要一个参数来提供数据上下文(Predicate<?>
)。