避免简单的if/else条件

Eri*_*kWe 0 java

在我的程序中,我需要检查变量是否等于1,2或3,并根据结果执行不同的方法:

if (phase.equals("1")) {
    PhaseOne.performPhase(inputParser.getSource(), inputParser.getTarget());
} else if (phase.equals("2")) {
    PhaseTwo.performPhase(inputParser.getSource(), inputParser.getTarget());
} else {
    PhaseThree.performPhase(inputParser.getSource(), inputParser.getTarget());
}
Run Code Online (Sandbox Code Playgroud)

这段代码非常简单和基本,但我真的不喜欢它.当然我可以使用切换条件,但在我看来,它会以不同的方式显示相同的基本功能.

我的问题是:有没有办法以优雅和可扩展的方式实现该功能?

仅供参考,我已经发布了这篇文章,但我没有找到适合我的问题的答案.

Soc*_*owi 13

在我看来,你所链接问题的公认答案非常适合你.存储对地图中函数的引用:

Map<String,BiConsumer<T,U>> map = new HashMap<>();
map.put("1",PhaseOne::performPhase);
map.put("2",PhaseTwo::performPhase);
map.put("3",PhaseThree::performPhase);
map.get(phase).accept(inputParser.getSource(), inputParser.getTarget());
Run Code Online (Sandbox Code Playgroud)

替换TU类型inputParser.getSource()inputParser.getTarget().

使用这种方法,Phase…类不需要公共超类或接口.