2

我正在尝试将 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)))); 
}

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

4

1 回答 1

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)))); 
}
于 2017-04-10T20:48:11.747 回答