将供应商与普通对象一起传递给 log4j2 不会编译
Passing a supplier to log4j2 along with normal objects doesn't compile
我正在使用 log4j 2.4.1,它应该支持 lambda 表达式。
所以我正在编写这个无法编译的调用。
logger.trace("{}{}", "foo", ()->"bar");
然而,以下两行工作正常:
logger.trace("{}{}", "foo", "bar");
logger.trace("{}{}", ()->"foo", ()->"bar");
我只是不明白为什么我不能在这里将 Supplier 作为对象传递...
是什么导致无法编译,我应该向 log4j 团队提出什么建议来解决这个问题?
编译错误如下:
no suitable method found for trace(java.lang.String,java.lang.String,()->"bar")
Logger
上可用的相关方法是:
...
trace(String, Object...); // all parameters are non-lambda Objects
trace(String, Supplier<?>...); // all parameters are lambda expressions
...
这意味着您可以传递任何(非 lambda)对象的一个或多个参数,或者您可以传递一个或多个 lambda 表达式作为参数。
为了支持您的想法,需要将以下方法添加到 Logger 接口:
// support one Object param followed by one or more lambda expressions
trace(String, Object, Supplier<?>...);
但是,这只会对 logger.trace("{}{}", "foo", ()->"bar")
有帮助,对 logger.trace("{}{}{}", "foo", ()->"bar", "xxx")
.
这样的事情没有帮助
我认为不可能以通用方式支持对象参数和 lambda 表达式参数的任意混合。
我正在使用 log4j 2.4.1,它应该支持 lambda 表达式。
所以我正在编写这个无法编译的调用。
logger.trace("{}{}", "foo", ()->"bar");
然而,以下两行工作正常:
logger.trace("{}{}", "foo", "bar");
logger.trace("{}{}", ()->"foo", ()->"bar");
我只是不明白为什么我不能在这里将 Supplier 作为对象传递...
是什么导致无法编译,我应该向 log4j 团队提出什么建议来解决这个问题?
编译错误如下:
no suitable method found for trace(java.lang.String,java.lang.String,()->"bar")
Logger
上可用的相关方法是:
...
trace(String, Object...); // all parameters are non-lambda Objects
trace(String, Supplier<?>...); // all parameters are lambda expressions
...
这意味着您可以传递任何(非 lambda)对象的一个或多个参数,或者您可以传递一个或多个 lambda 表达式作为参数。
为了支持您的想法,需要将以下方法添加到 Logger 接口:
// support one Object param followed by one or more lambda expressions
trace(String, Object, Supplier<?>...);
但是,这只会对 logger.trace("{}{}", "foo", ()->"bar")
有帮助,对 logger.trace("{}{}{}", "foo", ()->"bar", "xxx")
.
我认为不可能以通用方式支持对象参数和 lambda 表达式参数的任意混合。