Sfl4j和Java 8:此表达式的目标类型必须是功能接口

问题描述 投票:1回答:1

我有一个非常昂贵的操作来生成调试消息,并且我希望避免每次都生成它。

所以我用这个:

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();
}

我做错了什么?

java java-8 slf4j
1个回答
2
投票

我不认为SLF4J不支持惰性消息parameter构造,只是不支持惰性message构造(使用消息格式)。

但是您可以使用类似这样的东西:

if (log.isDebugEnabled()){
  log.debug(expensive());
}
© www.soinside.com 2019 - 2024. All rights reserved.