2017-04-10 70 views
2
的方法

我试图将javaslang的模式匹配以经典的工厂模式: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)))); 
} 

然而,这种溢出,所有的方法都运行(我得到不同的四个相同的电话记录器的级别)。

回答

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)))); 
} 
+0

这给编译错误和“不能返回的空隙结果”。 – fbielejec

+1

“不能用于(API.Match.Case <?延伸Ť,?延伸R> [] 推断类型参数(一个或多个)” @fbielejec我做了一个调整,也许它现在有效。 –