我试图在经典工厂模式中融入javaslang的模式匹配:
public void log(String message, Integer level) {
Match(level).of(
Case($(INFO), run(() -> logger.info(message))), //
Case($(DEBUG), run(() -> logger.debug(message))), //
Case($(WARNING), run(() -> logger.warn(message))), //
Case($(ERROR), run(() -> logger.error(message))), //
Case($(), run(() -> logger.info(message))));
}
然而这个溢出并运行了所有方法(我对记录器的不同级别进行了四次相同的调用)。
答案 0 :(得分:2)
你实际上不应该致电run
,你需要进行一些懒惰的评估。由于我根本没有理由打电话给run
,我只是删除了。这应该有用。
修改:添加run
以提供可推断的返回值。
public void log(String message, Integer level) {
Match(level).of(
Case($(INFO), l -> run( () -> logger.info(message))), //
Case($(DEBUG), l -> run( () -> logger.debug(message))), //
Case($(WARNING), l -> run( () -> logger.warn(message))), //
Case($(ERROR), l -> run( () -> logger.error(message))), //
Case($(), l -> run( () -> logger.info(message))));
}