Sfl4j和java 8:此表达式的目标类型必须是函数接口
我有一个非常昂贵的操作来生成调试消息,我希望避免每次生成调试消息 所以我用这个:Sfl4j和java 8:此表达式的目标类型必须是函数接口,java,java-8,slf4j,Java,Java 8,Slf4j,我有一个非常昂贵的操作来生成调试消息,我希望避免每次生成调试消息 所以我用这个: log.debug("{}", () -> expensive()); //gives the target type must be a functional interface 我定义: private String expensive(){ StringBuilder sb = new StringBuilder(); aLongList.forEach( (element) ->
log.debug("{}", () -> expensive()); //gives the target type must be a functional interface
我定义:
private String expensive(){
StringBuilder sb = new StringBuilder();
aLongList.forEach( (element) -> sb.append(element));
return sb.toString();
}
我做错了什么 我认为SLF4J不支持惰性消息参数构造,只支持惰性消息构造(使用消息格式) 但你可以用这样的方法:
if (log.isDebugEnabled()){
log.debug(expensive());
}
这违反了声纳规则,这就是我寻找替代品的原因:(最后我切换到log4j2,它提供了我要寻找的接口。)感谢您发出信号说是slf4j故障