Javaslang - 在Pattern Matcher中运行方法

时间:2017-04-10 20:02:40

标签: java java-8 vavr

我试图在经典工厂模式中融入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)))); 
}

然而这个溢出并运行了所有方法(我对记录器的不同级别进行了四次相同的调用)。

1 个答案:

答案 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)))); 
}